0

私は spoj cubefrで質問をしていました。

私はコードを書きましたが、答えがいつも間違っているのでわかりません。誰か教えてください。

#include<stdio.h>
#include<stdlib.h>

int main()
{   
    int arr[1000001];
    int i,root,temp,j=0;

    for(i=2;i<=100;i++)
    {
        temp = i*i*i;
        root = temp;
        while(root <=1000000)
        {
            arr[root] = 1;
            root = root + temp;

        }

    }

    int a[1000001];
    a[0]=0;
    a[1]=1;
    int b=2,n;
    int cnt=0;

    for(j=2;j<=1000000;j++)
    {
        if (arr[j] != 1)
        {
            a[b] = j-cnt;
            b++;
        }
        else
        {
            b++;
            cnt++;
        }

    } 
    int k,t;
    scanf("%d",&t);
    for(k=1;k<=t;k++)
    {
        scanf("%d",&n);
            if (arr[n] == 1)
            {
                printf("Case %d: Not Cube Free\n", k);
            }
            else
            {
                printf("Case %d: %d\n", k, a[n]);
            }
    }
    return 0;
}   
4

1 に答える 1

2

ローカル変数は、プログラムの実行時にゼロになることが保証されていません。a と arr を確実にゼロにするには、それらをグローバルにするか、memset を使用します。ちなみに両方やります。一般的には、大きな配列をグローバル スコープ (もちろん競技用) に配置し、memset を使用して複数のテスト ケースの問題を解決するのに役立つ優れたルーチンを作成することをお勧めします。私を信じてください-つらい経験。

于 2012-06-01T06:01:37.523 に答える