0

このコードは、最初の n 個の自然数を格納します。また、番号の順序は昇順です。where でa[i]割り切れないように、すべての数値を出力する必要があります。これが私が書いた簡単なコードです。1回のループでO(n)オーダーでやってみました。しかし、それはゴミの価値を与えています。a[j]i>j

#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配列では から0までn-1です。iまた、while ループに入る前にの値をリセットするのを忘れています。

于 2013-07-16T11:20:34.033 に答える
2

intmallocのメモリを割り当てるために使用します。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

while ループに入る場合は にしてくださいi=0

于 2013-07-16T11:19:04.400 に答える
0

バグ:

1)ループに入っiたときの値を確認しますwhile-それはあなたが話している「ゴミ」のためです。

2)初期化されていませんn。配列の割り当てに使用しています。

3) 配列はゼロベースです。したがって、forループでは、 i=0;i<n

i4) while ループは(またはi+1) が であるかどうかを気にしません<n。問題になる可能性があります。

コードの機能に関しては、説明したものを実装していません。ただし、SO はコーディング サービスではありません。まず、紙とペンだけを持って、プログラムの流れを考えてみてください。

HTH。

于 2013-07-16T11:18:39.957 に答える