这里的代码存储了前n个自然数。并且数字的顺序是递增的。现在我们必须打印所有数字,以便a[i]
不能被a[j]
i>j
整除。
这是我写的简单代码。我尝试使用一个循环以O(n)顺序进行。
但它给了垃圾价值。
#include<stdio.h>
main()
{
int i=1,n;
printf("enter the numbers \n");
scanf("%d",&n);
int a[n];
for(i=1;i<=n;i++)
{
a[i]=i;
printf("%d\n",a[i]);
}
while(a[i+1]>a[i] && a[i+1]%a[i]!=0){
printf("%d",a[i]);
i++;
}
}
答案 0 :(得分:2)
C阵列中的0
到n-1
。此外,您在进入while循环之前忘记重置i
的值。
答案 1 :(得分:2)
使用malloc
分配n
整数的内存:
int *a = (int *)malloc(sizeof(int) * n); //and check that allocation has succeed
然后,不要忘记C中的数组从零开始所以你的循环应该是:
for(i=0;i<n;i++)
在进入while
循环之前,请务必重置i
并且i + 1
不超过数组限制。
答案 2 :(得分:0)
错误:
1)在输入i
循环时检查while
的值 - 这是您正在谈论的“垃圾”。
2)n
未初始化。您正在使用它来分配数组。
3)数组从零开始。所以在for循环中,应该是i=0;i<n
4)while循环不关心i
(或i+1
)是<n
。可能是一个问题。
至于代码的功能,它没有实现您描述的内容。但是SO不是一种编码服务,它有助于培养你自己编写的编程技巧 - 首先,只需要一支笔和纸,然后考虑程序流程。
HTH。
答案 3 :(得分:0)
输入while循环时,请i=0
。