关于#PTA#的问题,如何解决?(关键词-输出格式)

在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。

你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。

输入格式:
你的程序首先会读到一个正整数n,n∈[1,100000],然后是n个整数。

输出格式:
如果这些整数中存在重复的,就输出:

YES
否则,就输出:

NO
输入样例:
5
1 2 3 1 4
输出样例:
YES
代码长度限制
16 KB
时间限制
800 ms
内存限制
64 MB
C (gcc)








1
#include <stdio.h>
2
int main()
3
{
4
int a[100000],num,n,i=0;
5
int flag[100000] = { 0
6
};
7
scanf("%d", &n);
8
for (i = 0; i < n; i++)
9
{
10
scanf("%d", &a[i]);
11
num = a[i];
12
flag[num]++;
13
if (flag[num] == 2)
14
{
15
printf("YES");
16
return 0;
17
}
18
}
19
printf("NO");
20
return 0;
21
}

运行错误,为何,怎么改?

flag设为数组反而会影响你的思路,这种判断是否重复的题一般按照下面这种方法写
用 “哈希查找” 的思想,具体思路:遇到重复出现的就f==1,输出yes退出循环,不然就表示无重复,那么f的值没变,还是0,输出no

#include <stdio.h>

int main()
{
    int n, i, num, f=0;
    static int hash[100010];
    scanf("%d",&n);

    for(i=0; i<n; i++)
    {
        scanf("%d", &num);
        hash[num]++;
        if(hash[num]==2)
        {
            f = 1;
            printf("YES");
            break;
        }
    }
    
    if(f==0)  printf("NO");
     return 0;
}