洛谷刷题,完成但得分为0,为何?

第一次练题,感觉完成了题目要求,但得分为0
(题目是NOIP的P1059 [NOIP2006 普及组] 明明的随机数 )
代码如下

#include
int main()
{
    int N,i ,t ;
    int arr[1001];
    int n = 0;
    scanf("%d", &N);
    for (i = 0; i < N; i++)
    {
        scanf("%d",&t);
        arr[t] = 1;
    }
    for (i = 1; i < 1001; i++)
    {
        if (arr[i])
            n++;
    }
    printf("%d\n",n);
    for (i = 1; i < 1001; i++)
    {
        if (arr[i] == 1)
            printf("%d ",i);
    }
}

img


请问该如何改代码

对于样例中的20,你这个程序计算后arr[20]=2,但是你输出的时候是arr[i]=1, 导致20没有输出,所以需要修改一下,而且arr数组需要初始化为0

#include<stdio.h>
int main()
{
    int N,i ,t ;
    int arr[1001] ={0};
    int n = 0;
    scanf("%d", &N);
    for (i = 0; i < N; i++)
    {
        scanf("%d",&t);
        arr[t] = 1;
    }
    for (i = 1; i < 1001; i++)
    {
        if (arr[i])
            n++;
    }
    printf("%d\n",n);
    for (i = 1; i < 1001; i++)
    {
        if (arr[i])
            printf("%d ",i);
    }
}

t没初始化t=0;
而且第一个for内始终是t,t没变换,所以arr内始终只有a[0]有意义;
第二个for内,你去访问a[1]或a[2]或.....,都是无意义的数,因为上一个for中始终你只对a[0]赋值了。
我觉得你是打错了吧,第11句应该是arr[i]=t; 这才是你的本意吧。
若有帮助,点个采纳哦