i possible 2022-05-15 10:12 采纳率: 100%
浏览 177
已结题

关于#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
}

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

  • 写回答

1条回答 默认 最新

  • 米莱虾 算法领域优质创作者 2022-05-15 16:59
    关注

    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;
    } 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 5月15日

悬赏问题

  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本