http://acm.hdu.edu.cn/showproblem.php?pid=2012
思路:用if语句确定输入的范围,然后先标出一个标记为sign=1,利用for语句进行表达式的计算,如果遇到不是素数的数,sign自增,如果全是素数,sign不会自增,最后判断sign是否为1,如果是就输出OK,不是就输出Sorry。
错误代码:
#include "stdio.h"
int main()
{
int x,y,sign,m,i,j;
while(scanf("%d%d",&x,&y)!=EOF)
{
if (x<-39||x>y||y>50) break;
else
{ if (x==0&&y==0)
break;
for(i=x;i<=y;i++)
m=i*i+i+41;
for(j=2;j<100;j++)
if (m%j==0) break;
else sign=1;
}
if (sign==1)
printf("Ok\n");
else
printf("Sorry\n");
}
return 0;
}
问题:1.for语句的缩进有问题,for语句里的使用也有问题
2.sign的使用和最后的printf函数都出错了
改后的正确代码:
#include "stdio.h"
int main()
{
int x,y,sign,m,i,j;
while(scanf("%d %d",&x,&y)!=EOF)
{
if (x<-39||x>y||y>50) break;
if (x==0&&y==0) break;
sign=1;
for(i=x;i<y;i++)
{ m=i*i+i+41;
for(j=2;j<m;j++)
if (m%j==0)
{
sign++;
break;
}
}
if (sign!=1)
printf("Sorry\n");
else
printf("OK\n");
}
return 0;
}
总结:这一个题并没有让我学到什么特别新的东西,但是提醒了我一个大问题,我在做题目的时候大方向是对的,主体也没有什么错,但多次提交都不通过,经多次修改最后才通过,这让我知道我在细节上的处理真的很不够,也常犯小问题都看不出来,这个问题一定要好好改才行