第一次练题,感觉完成了题目要求,但得分为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);
}
}
对于样例中的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; 这才是你的本意吧。
若有帮助,点个采纳哦