题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2008
一开始错误代码:
问题及修改:
1.最开始的时候就犯了一个很低级的错误,想要运用双层循环,却又将循环变量定义为同 一个量,但其实这道题不需要用到双层循环,因此就是要把内循环给删掉;
2.对输入数据的定义错误,没看清楚题目要求,误定义为int型,应该要改为float型;
3.对计数的定义问题,==与=的区别;还有逗号运算符的用法。
如果只是修改了1、2,而没有修改3,则代码会出现以下结果:
全修改后的正确代码:
#include "stdio.h"void main()
{ int m,i,count1,count2,count3; float a[100]; while(scanf("%d",&m)!=EOF)
{ count1=0;count2=0;count3=0; if(m==0||m>=100) break; for(i=0;i<m;i++)
{scanf("%f",&a[i]); if (a[i]==0)
{ count1++;
}
else if (a[i]>0)
{ count2++;
} else if (a[i]<0)
{ count3++;
}
} printf("%d %d %d\n",count3,count1,count2);
}
}
笔记:要去理解双层循环的用法;要熟悉基本运算符的用法以及格式的规范性。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2009
这个题目不难,但是在做的过程中遇到了一个很碰巧的现象
答案大了是因为我改代码的时候把外面的赋值了,却忘记把里面的循环减一了,除掉这个来说答案可以说是正确的
但是!!这个答案是碰巧对的,因为我的代码那里定义成了int型,输入其他的数据其实就是错误的答案,那这个碰巧在哪里呢,我的个人是觉得就在于81的每次平方根后都是整数,在询问组长之后得到较为官方的解释就是n最后参与计算的数值是3,sqrt(3)会自动转化为double型,所以对计算结果没有影响。
sqrt是一个包含在math里面的函数,他的返回值是double型。虽然他引用的参数不一定是doule型,但是并不会影响他的返回值类型
小结:经常做题除了在大一些的方面会出问题,小问题也是经常出,所以我需要强化基础 知识,上面一个简单的题目出了小问题也能牵扯出一些知识,虽然不太理解,但是先记住也是好的。