愤怒的小侯 2021-12-17 10:33 采纳率: 80%
浏览 55
已结题

遇到了几道C++的数组题,希望大 GOD解惑,最好有注释

排列判断

描述
题目有多组测试,每组测试会给出一个长度为 n 的数组 P,你需要用程序判断 P 中的数字是否为一个 1-n 的排列
(包含1-n各一次)。
输入格式
第1行:1个数字t,表示测试的组数(1 < t <= 1000)。之后每组数据两行:
第1行:1个数字n,表示数组的长度(1 < n <= 500)。
第2行:共n个数字P[i],中间用空格分隔,对应数组的元素(1 < P[i] <= 10^9)。
输出格式
输出共t行,对应每一组数据的判断结果,输出“Yes”或者 "No"。
数据范围
1 <= t <= 1000,1 < n <= 500,1 < P[i] <= 10^9
输入样例
2
4
1 2 4 3
4
1 4 2 2
输出样例
Yes
NO
样例解释
1 2 4 3 包含 1-4各一次,所以输出 "Yes",
1 4 2 2 中不包括3,却出现了2个2,所以输出 "No"

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2021-12-17 10:36
    关注

    说一说哪一部分你有困难呢
    意思是,输入4,那么数组元素内容必须是1-4四个数,可以无序?

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int i,j,T,n,d,a[500] = {0};
        scanf("%d",&T);
        for(i=0;i<T;i++)
        {
            scanf("%d",&n);
            memset(a,0,500*sizeof(int));
            for(j=0;j<n;j++)
            {
                scanf("%d",&d);
                if(d>=1 && d<=n)
                    a[d-1]++;
            }
            for(j=0;j<n;j++)
                if(a[j] != 1)
                {
                    printf("No\n");
                    break;
                }
           if(j==n)
                printf("Yes\n");  
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月25日
  • 已采纳回答 12月17日
  • 创建了问题 12月17日