pku1001

#对1001的反省

阅读过网上其他人的solution之后自己的想法:

1.字符串输入之后先遍历,找出整数的个数,小数点的位置,和小数的个数。

2.去掉先导0和后导0。统计这之后的,整数个数,小数点位置和小数个数。

3.检测到小数点后,前置一位。化成没有小数点的“整数”形态。

4.将有效字符转化为整形数组

在编写代码时遇到了问题:判断逻辑出现了表达不正确的情况。现在首要的问题是“我怎么样才能整理清楚我的判断逻辑”。不是因为C语言的控制流不会,而是反映出在这里的控制流逻辑上我还没有完全搞清楚,是半知半解的,是不可靠的陈述性知识的积累,这是会出大问题的。现在最重要的是,再回过头认真分析这里的逻辑判断,找出真正清楚的内涵逻辑。

1.为什么遍历字符串?

 为了找到整数的个数,小数位置和小数个数。

2.什么样的逻辑判断可以找到需要的结果?很明显“小数点”。从0开始如果不是小数点,就是整数,计数整数个数。遇到小数点,标记小数点位置。从字符串尾部开始像前面遍历,如果不是小数点计数小数个数,遇到小数点位置标记。(可以判断前后两次小数点位置标记是否一样,若一样无错)

3.while(str[i]!='.')//最开始是“。”一直在报错

4.为什么?

5.

6.预期效果是:

0 9

1 5

2 .

3 1

4 2

5 3

 

再去前导0时,可以把小数点位置作为参考系,从中间像两边计数00 01,11

逻辑被绕进去了,想复杂了。==2又绕不出来了

 

假设是xy.abc型(带有小数点)

j标记前导0,执行j++。用i标后导0,执行i--

(1)那么,max(j) = 2,min(i) = 2.==》全0的情况。

(2)非全0时候,一定是value(j) < value(i)

假设是xyabc型(不带小数点)

同上定义。

(1)max(j) =1 min(i) = 0 .==>情况

(2)只有一个0时候,value(j) = value(i)

(3)全非0时,value(j) < value(i) 

 

 


你可能感兴趣的:(pku1001)