我想通过将素数放入一个子集来组织一组整数。 例如:
输入集:
{2,4,6,7,11,6,3}.
期望的结果:
素数:{2,7,11,3}.
非素数:{4,6,6}.
这是我合理的代码,结果是荒谬的结果:
#include <stdio.h>
int main() {
int i,j,n,a=0,b1=0,b2=0;
printf(" Enter the number of elements in the set: ");
scanf("%d",&n);
int integer[n],nonPrime[n],prime[n];
for(i=1;i<=n;i++) {
printf(" Enter #%d element of the set: ",i);
scanf("%d",&integer[i-1]);
}
printf("\n The set is: {");
for(i=1;i<=n;i++) {
printf("%d ",integer[i-1]);
}
printf("}");
for(i=1;i<=n;i++) {
for(j=2;j<=integer[i-1]/2;j++) {
if(integer[i-1]%j==0) {
a=1;
break;
}
}
if(a==1) {
integer[i-1]=nonPrime[i-1];
b1++;
}
else {
integer[i-1]=prime[i-1];
b2++;
}
}
printf("\n Prime numbers: { ");
for(i=1;i<=b2;i++) {
printf("%d ",prime[i-1]);
}
printf("}\n Non prime numbers: { ");
for(i=1;i<=b1;i++) {
printf("%d ",nonPrime[i-1]);
}
printf("} \n");
return 0;
}
//HENG SOK MENG
输出:
Enter the number of elements in the set: 6
Enter #1 element of the set: 1
Enter #2 element of the set: 3
Enter #3 element of the set: 5
Enter #4 element of the set: 7
Enter #5 element of the set: 4
Enter #6 element of the set: 6
The set is: {1 3 5 7 4 6 }
Prime numbers: { 1965421290 1965972381 718360966 32 }
Non prime numbers: { 2686560 718361022 }
Process returned 0 (0x0) execution time : 6.063 s
Press any key to continue.
答案 0 :(得分:1)
我认为你的逻辑略有错误。此代码显示您的循环可以简化为for (i = 0; i < n; i++)
,这将允许对[i]
而不是[i-1]
进行索引。
您可以使用isprime(int n)
之类的辅助函数来检查integers[n]
数组中的素数,然后相应地添加到其他相应的分区数组。
此代码段演示了这一点:
#include <stdio.h>
#include <stdlib.h>
int isprime(int n);
int
main(void) {
int n, i, primecnt = 0, nonprimecnt = 0;
printf("Enter the number of elements in the set: ");
if (scanf("%d", &n) != 1) {
printf("Invalid entry\n");
exit(EXIT_FAILURE);
}
int integers[n], prime[n], nonprime[n];
for (i = 0; i < n; i++) {
printf(" Enter #%d element of the set: ",i+1);
if (scanf("%d", &integers[i]) != 1) {
printf("Invalid entry\n");
exit(EXIT_FAILURE);
}
}
printf("\n The set is: {");
for(i = 0;i < n; i++) {
printf("%d ",integers[i]);
}
printf("}");
for (i = 0; i < n; i++) {
if (isprime(integers[i])) {
prime[primecnt++] = integers[i];
} else {
nonprime[nonprimecnt++] = integers[i];
}
}
printf("\n Prime numbers: { ");
for(i = 0; i < primecnt; i++) {
printf("%d ", prime[i]);
}
printf("}\n Non prime numbers: { ");
for(i = 0; i < nonprimecnt; i++) {
printf("%d ",nonprime[i]);
}
printf("} \n");
return 0;
}
int
isprime(int n) {
int divisor;
if (n < 2) {
return 0;
}
for (divisor=2; divisor*divisor<=n; divisor++) {
if (n%divisor==0) {
return 0;
}
}
return 1;
}
答案 1 :(得分:1)
哦,您的代码中存在一些问题:
=
的左侧侧。i
)将数组integer[]
编入索引作为数组prime[]
和nonPrime[]
但它们不是synchronized (例如,第5个整数可能是第2个素数)。b1
nonPrime[]
和b2
来prime[]
?)a
(按a = 1
设置),但您在使用它之后从未重置它(a = 0
)。 (注意:您为此变量选择了非常好的名称,就像其他许多人一样。)j
)永远不会对数字1
,2
和3
执行。我在您的代码中进行了最小的更改,以修复这些问题。
所以请用以下代码替换代码的第二部分:
for(i=1;i<=n;i++) {
for(j=2;j<=integer[i-1]-1;j++) {
if(integer[i-1]%j==0) {
a=1;
break;
}
}
if(a==1 || integer[i-1] == 1) {
nonPrime[b1]=integer[i-1];
b1++;
}
else {
prime[b2]=integer[i-1];
b2++;
}
a = 0;
}
printf("\n Prime numbers: { ");
for(i=0;i<b2;i++) {
printf("%d ",prime[i]);
}
printf("}\n Non prime numbers: { ");
for(i=0;i<b1;i++) {
printf("%d ",nonPrime[i]);
}
printf("} \n");
return 0;
}
我测试了它,现在它工作正常。尽管它很丑陋 - 但主要是你的,所以你会理解它。
答案 2 :(得分:0)
检查LHS&amp; RHS
integer[i-1]=nonPrime[i-1]
integer[i-1]=prime[i-1]