0

这里的代码存储前 n 个自然数。并且数字的顺序是升序的。现在我们必须打印所有的数字,这样a[i]它就不能被a[j]where整除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++;
    }
}
4

4 回答 4

2

在 C 数组中是从0n-1i此外,您忘记在进入 while 循环之前重置 的值。

于 2013-07-16T11:20:34.033 回答
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不超过数组限制。

于 2013-07-16T11:21:01.950 回答
0

错误:

1)检查输入循环i时的值while- 那是你正在谈论的“垃圾”。

2)n未初始化。您正在使用它来分配数组。

3) 数组是从零开始的。所以在for循环中,应该是 i=0;i<n

4)while循环不关心i(或i+1)是否是<n。潜在的问题。

至于您的代码的功能,它没有实现您描述的内容。但是 SO 不是一个编码服务,它对培养你的编程技能有好处,你自己做 - 首先,只需拿着笔和纸,思考一下程序流程。

HTH。

于 2013-07-16T11:18:39.957 回答
0

进入while循环时,请make i=0.

于 2013-07-16T11:19:04.400 回答