呃 我也想问为什么不能用下面这段程序
我告诉你 你下面给的这段程序是对的 而且比正确答案的要好的多(sum cnt是全局变量不要再重新定义了 int i,sum=0,cnt=0;这样会屏蔽全局变量)
P.S 编程后算出的结果和上面也是一样的
个人觉得素数判定函数是不对的:
int isPrime(int number)
{
int i,tag=1;
if(number==1)
return 0;
for(i=2;tag && i<=number/2;i++)
if(number%i==0) tag=0;
return tag;
}
分析:当number不是素数,如number=15;当执行到15%3==0时,tag=0,tag&&i一直为0,程序陷入死循环,就出错了,正确的应为:
int isPrime(int number)
{
int i,tag=1;
if(number==1)
return 0;
for(i=2; i<=number/2;i++)
if(number%i==0) tag=0;
return tag;
}
楼主的方法是可行的啊
你看的是编程题吧?理论上说这种编程的大题目不应该有标准答案的,很多方法都可以,也许你的题目方法比他的更好。就像做数学的大题,一般老师都不会一个个步骤对照标准答案的吧??一楼的也说了程序结果是一样的,所以我觉得你可以不用考虑这些的,结果一样的就OK了。
P.S:你的方法的执行效率要比答案的要高,但是还是处于同一数量级上面的
新修改:
实在抱歉,之前我说的地方有些问题,你说的算法中的变量定义出了问题,虽然不是算法本身的问题,但是结果是不正确的,你改为
void countValue()
{
int i;
for(i=2;i<90;i++)
if(isPrime(i)&&isPrime(i+4)&&isPrime(i+10))
{
sum+=i;
cnt++;
}
}
就对了。
具体原因是你在函数中定义的sum和cnt把全局变量屏蔽掉了
或者你也可以改为
void countValue()
{
int i,sum=0,cnt=0;
for(i=2;i<90;i++)
if(isPrime(i)&&isPrime(i+4)&&isPrime(i+10))
{
::sum+=i;
::cnt++;
}
}
这是命名空间的使用,可能在C语言不能实现,在C++中才可以
原因就是1楼所说的