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 回答