我是一名非正规的三年级CS学生,我刚刚意识到我必须开始编程。
我以较低的分数通过了我的编程课程,所以我在编程和编程方面没有很好的背景。
我正在试着写一段代码,它能在给定的上下界之间生成质数。不太了解C语言,强迫我写一段粗略的代码,然后再去解决它。我可以很容易地为目标函数设置逻辑,但我可能通过几种不同的方法创建了一个错误的算法。
在这里我分享我的最后一段代码,我打算计算当一个数字给余数为零时,它应该是self和1,所以count==2;我的实现和我的解决方案生成风格有什么问题?我希望你能让我熟悉编程世界,我找不到足够的动力和勇气去深入编程。
H是包含İ的
int primegen(int down,int up)
{
int divisor,candidate,count=0,k;
for(candidate=down;candidate<=up;candidate++)
{
for(divisor=1;divisor<=candidate;divisor++)
{
k=(candidate%divisor);
}
if (k==0) count++;
if(count==2)
{
printf("%d\n", candidate);
count=0;
}
else
{
continue;
}
}
}
int main()
{
primegen(3,15);
return 0;
}发布于 2011-01-07 10:02:09
#include <stdio.h>
#include <math.h>
int primegen(unsigned int down,unsigned int up)
{
int *ar;
int divisor,candidate,count=0,k;
for(candidate=up;candidate>=down;candidate--)
{ count=0;
for(divisor=2;divisor<candidate;divisor++)
{if (((candidate%divisor)==0)) count++; }
if(count==0) {printf("%d\n",candidate); count=0;}
}
}
int main()
{
primegen(3,15);
return 0;
}最后,我纠正了我的解决方案。主要问题是在第二个for循环之前,我没有将count赋值为零。我更改了候选的顺序(从大到小),并更正了一些语法错误。
感谢所有人的帮助和回答。:)我很高兴这样做了,这样我就可以通过其他算法和问题。
发布于 2011-01-07 06:36:11
您在candidate%divisor测试中包含了1和candidate,这两个值都将始终返回0,因此您测试的每个数字都将显示为质数。
而不是这样:
for(divisor=1;divisor<=candidate;divisor++)执行以下操作:
for(divisor=2;divisor<candidate;divisor++)更新
您的代码中有太多的错误无法列出,但不管怎样,这里有几个错误:
当您检查candidate%divisor,k始终为candidate%candidate或0<代码>H113时,您将在for循环
k,在除数循环
看,这里有一些伪代码,用于最简单的实现。试着找出你的代码偏离这一点的地方:
for candidate = down to up
// assume the candidate is primt
prime = true
// check all divisors from 2 to the candidate - 1, inclusive
for divisor = 2 to candidate - 1
if candidate % divisor == 0
// divisor is a factor of candidate
// candidate isn't prime, so we can stop checking
prime = false
break
end if
next divisor
// if prime is still true, we successfully tested every number from 2..candidate
// and found no factors
if prime
print "candidate {candidate} is prime!"
end if
next candidate发布于 2011-01-07 06:44:58
candidate%divisor,但只有在循环结束后,你才会检查count是否应该递增。因此,对于检查的最后一个除数,您只能为每个候选对象递增一次。count。因此,您可以对所有候选人的找到的因子一起计数,同时对每个候选人单独计数。https://stackoverflow.com/questions/4620642
复制相似问题