博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程算法基础-一刀切法
阅读量:5371 次
发布时间:2019-06-15

本文共 5109 字,大约阅读时间需要 17 分钟。

一刀切法

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

程序逻辑

         開始

         中间

         结束

 

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

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
abctttkmduuuxyz
一刀切法上式:
事先补齐

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

事后修正

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

 

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

"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
mySplit(String s) { List
list = new ArrayList
();//建立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
mySplit(String s) { List
list = new ArrayList
();//建立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; }}
通话时间长度为:51s0分51秒

转载于:https://www.cnblogs.com/mfrbuaa/p/3779744.html

你可能感兴趣的文章
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
浅谈性能测试
查看>>
较快的maven的settings.xml文件
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
linux的子进程调用exec( )系列函数
查看>>
zju 2744 回文字符 hdu 1544
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
zoj 1232 Adventure of Super Mario
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
Redis常用命令
查看>>