问题描述:
在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。
你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。
输入格式:
你的程序首先会读到一个正整数n,1<=n<=100000。
然后是n个整数,这些整数的范围是[1,100000]。
输出格式:
如果这些整数中存在重复的,就输出:
YES
否则,就输出:
NO
输入样例:
5
1 2 3 1 4
输出样例:
YES
思路:
-
变量声明:
n
: 用户输入的整数数量。i, c
: 循环计数器和当前读取的整数。cnt
: 用于记录数组中是否存在重复元素的计数器。a[100002]
: 一个整数数组,用于记录每个整数出现的次数。
-
用户输入:
- 使用
scanf
函数读取一个整数n
,表示接下来要输入的整数的数量。
- 使用
-
循环遍历:
- 使用for循环遍历从0到
n-1
的每个整数i
。 - 在循环内,使用
scanf
函数读取一个整数c
。 - 将
c
作为索引,在数组a
中增加对应的计数。这意味着,如果之前已经读取了与c
相同的整数,a[c]
的值就会增加1。
- 使用for循环遍历从0到
-
检测重复:
- 如果在读取整数
c
时,发现a[c]
的值大于1,这意味着之前已经读取过与c
相同的整数。因此,输出"YES"并立即跳出循环。 - 在跳出循环后,使用一个if语句检查是否由于找到了重复的元素而跳出了循环(即
cnt
是否大于0)。如果确实如此,直接返回并输出"YES"。否则,输出"NO"。
- 如果在读取整数
代码:
#include<stdio.h>
int main()
{
int n,i,c,cnt=0;
int a[100002]={0};
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&c);
a[c]++;
if(a[c]>1){
cnt++;
printf("YES");
break;
}
}
if(cnt==0){
printf("NO");
}
return 0;
}
运行截图: