• 编程算法基础-一刀切法


    1.5一刀切法

    编程和编筐一样,处理边缘问题相同重要。

    程序逻辑

             開始

             中间

             结束

    一刀切法上式

    用空格或逗号分隔的串,提取为各个部分

    abc ttt,kmd,uuu xyz

    切分成每一部分。

    /*
     * "abc ttt,kmd,uuu xyz"
    用逗号或者空格隔开字符串
    分解为各个部分
    */
    package OneCut;
     
    public class SplitString {
        public static void main(String[] args) {
           // 一刀切(上式:事先补齐法)
           String s = "abc ttt,kmd,uuu xyz";
           String s2 = "";
          
           s+=',';//一刀切,补齐
          
           for(int i=0;i<s.length();i++){
               char c = s.charAt(i);
               if(c==' '||c==','){
                  System.out.println(s2);
                  s2="";
               }else{
                  s2+=c;
               }
           }
        }
    }
    abc
    ttt
    kmd
    uuu
    xyz


    一刀切法上式:
    事先补齐

    设法先修补一下,让边沿和中间的部分处理没有差别

    一刀切法下式

    事后修正

    先作出统一的结果,再对结果进行修补

    将一个串拆成字母,而且字母间用逗号切割

    "abcd"à "a,b,c,d"

    public class StringToLetter {
     
        /**
         * 将一个串拆成字母
         * 而且字母间用逗号切割
         * "abcd" "a,b,c,d"
         */
        public static void main(String[] args) {
           // 一刀切(下式:事后修正法)
           String s = "abcdefg";
           String s2 = "";
           for (int i = 0; i < s.length(); i++) {
               char c = s.charAt(i);// 取出每个字符赋值给c
               s2 += "," + c;// 将s2中增加逗号和c
           }
           s2 = s2.substring(1);// 取s2的字串,就能够避免开头是逗号的问题
           System.out.println(s2);
        }
    }
    //当s为空时会报错
    
    
    a,b,c,d,e,f,g


     

    通话时间编程

    如果手机通话时间不会大于24小时。

    某个用户的開始通话时间为: 12:38:15

    结束通话时间为: 12:39:16

    则该用户通话时长为:62秒

    对于一般的情况,可能须要考虑:跨分钟,跨小时,跨零点的问题。

    假设已知了開始和结束时间,试编程求通话时长。

    时间格式为:hh:mm:ss

    小时採用24小时制

    提示:关键在于怎样处理,能把貌似不同的特殊情况转化为一致的一般情况。

    /*
    如果手机通话时间不会大于24小时。
    某个用户的開始通话时间为: 12:38:15
    结束通话时间为: 12:39:16
    则该用户通话时长为:62秒
    对于一般的情况,可能须要考虑:跨分钟,跨小时,跨零点的问题。
    如果已知了開始和结束时间,试编程求通话时长。
    时间格式为:hh:mm:ss
    小时採用24小时制
    提示:关键在于怎样处理,能把貌似不同的特殊情况转化为一致的一般情况。
     */
     
    package OneCut;
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class PhoneTime {
        public static void main(String[] args) {
           String s1 = "23:38:16";
           String s2 = "0:28:16";
           int hour;
           if (Integer.valueOf(mySplit(s2).get(0)) < Integer.valueOf(mySplit(s1)
                  .get(0))) {
               hour = 24 + Integer.valueOf(mySplit(s2).get(0))
                      - Integer.valueOf(mySplit(s1).get(0));// 跨零点时+24
           } else {
               hour = Integer.valueOf(mySplit(s2).get(0))
                      - Integer.valueOf(mySplit(s1).get(0));
           }
           int min = Integer.valueOf(mySplit(s2).get(1))
                  - Integer.valueOf(mySplit(s1).get(1));
           int sec = Integer.valueOf(mySplit(s2).get(2))
                  - Integer.valueOf(mySplit(s1).get(2)) + 1;
           int time = hour * 60 * 60 + min * 60 + sec;
           System.out.println("通话时间长度为:"+time+"s");
        }
     
        public static List<String> mySplit(String s) {
           List<String> list = new ArrayList<String>();//建立List存放时间
           String t = "";//暂时字符串
           s += ":";//一刀切上式
     
           for (int i = 0; i < s.length(); i++) {
               char c = s.charAt(i);
               if (c == ':') {
                  list.add(t);//增加到list
                  t = "";
               } else {
                  t += c;
               }
           }
           return list;
        }
    }
    通话时间长度为:3001s


    改动一下时间格式

    /*
    如果手机通话时间不会大于24小时。
    某个用户的開始通话时间为: 12:38:15
    结束通话时间为: 12:39:16
    则该用户通话时长为:62秒
    对于一般的情况,可能须要考虑:跨分钟,跨小时,跨零点的问题。
    如果已知了開始和结束时间,试编程求通话时长。
    时间格式为:hh:mm:ss
    小时採用24小时制
    提示:关键在于怎样处理,能把貌似不同的特殊情况转化为一致的一般情况。
     */
     
    package OneCut;
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class PhoneTime {
        public static void main(String[] args) {
           String s1 = "23:38:16";
           String s2 = "23:39:6";
           int hour;
           if (Integer.valueOf(mySplit(s2).get(0)) < Integer.valueOf(mySplit(s1)
                  .get(0))) {
               hour = 24 + Integer.valueOf(mySplit(s2).get(0))
                      - Integer.valueOf(mySplit(s1).get(0));// 跨零点时+24
           } else {
               hour = Integer.valueOf(mySplit(s2).get(0))
                      - Integer.valueOf(mySplit(s1).get(0));
           }
           int min = Integer.valueOf(mySplit(s2).get(1))
                  - Integer.valueOf(mySplit(s1).get(1));
           int sec = Integer.valueOf(mySplit(s2).get(2))
                  - Integer.valueOf(mySplit(s1).get(2)) + 1;
           int time = hour * 60 * 60 + min * 60 + sec;
           System.out.println("通话时间长度为:"+time+"s");
          
           //为了显示的更好看,做例如以下改动。
           String ans = null;
          
           if(sec>0){
               ans = sec+"秒";
           }
          
           if(min>0){
               if(sec<0){
                  int min2=min-1;//这里min为负值
                  int sec2 = 1*60+sec;
                  ans = min2+"分"+sec2+"秒";
               }else{
                  ans=min+"分"+sec+"秒";
               }
           }
          
           if(hour>0){
               if(min<0){
                  if(sec<0){
                      int hour2=hour-1;
                      int min2=1*60+min-1;//这里min为负值
                      int sec2 = 1*60+sec;
                      ans = hour2+"小时"+min2+"分"+sec2+"秒";
                  }else{
                      int hour2=hour-1;
                      int min2=1*60+min;//这里min为负值
                      ans = hour2+"小时"+min2+"分"+sec+"秒";
                  }
               }else{
                  ans=hour+"小时"+min+"分"+sec+"秒";
               }
              
           }
           System.out.println(ans);
        }
     
        public static List<String> mySplit(String s) {
           List<String> list = new ArrayList<String>();//建立List存放时间
           String t = "";//暂时字符串
           s += ":";//一刀切上式
     
           for (int i = 0; i < s.length(); i++) {
               char c = s.charAt(i);
               if (c == ':') {
                  list.add(t);//增加到list
                  t = "";
               } else {
                  t += c;
               }
           }
           return list;
        }
    }
    通话时间长度为:51s
    0分51秒


  • 相关阅读:
    React教程(一) React介绍与搭建
    微信公众号订阅号以及服务号通过网页授权获取用户openid方法
    AES,DES加密JS源文件及其使用方法
    R 分类进行数值处理
    C++ const 关键字总结
    软工lintcode作业
    [恶意软件分析]DroidBox的环境搭建与使用
    Android第三次作业
    Android第二次作业
    android 第一次作业
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3779744.html
Copyright © 2020-2023  润新知