PAT~乙级~1083 是否存在相等的差 ~C++

题目描述:

给定 N 张卡片,正面分别写上 1、2、……、N,然后全部翻面,洗牌,在背面分别写上 1、2、……、N。将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否存在相等的差?

输入格式:

输入第一行给出一个正整数 N(2 ≤ N ≤ 10 000),随后一行给出 1 到 N 的一个洗牌后的排列,第 i 个数表示正面写了 i 的那张卡片背面的数字。

输出格式:

按照“差值 重复次数”的格式从大到小输出重复的差值及其重复的次数,每行输出一个结果。

输入样例:

8
3 5 8 6 2 1 4 7

输出样例:

5 2
3 3
2 2

----------------------------------------------------------答题区----------------------------------------------------------

#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
int main()
{
    int num;
    cin>>num;
    int a[num] = {0};
    for(int i=0;i<num;++i)
    {
        int temp;
        scanf("%d",&temp);
        a[abs(temp-(i+1))]++;
    }
    for(int i=num-1;i>=0;--i)
    {
        if(a[i]>1)
        {
            cout<<i<<" "<<a[i]<<endl;
        }
    }
    return 0;
}

 已经考完了乙级,虽然结果不是很理想,大家可以看一下我的经验贴https://blog.csdn.net/qq_40612211/article/details/100973477。

维护了一个PAT测试点问题的共享文档,欢迎大家把遇到的问题写在上面。

一起写文档:https://yiqixie.com/d/home/fcACe6xZ2aroPxFQrQZ05Cw32
github链接:https://github.com/Makerdd/PAT-yiji

发布了119 篇原创文章 · 获赞 5 · 访问量 4999

猜你喜欢

转载自blog.csdn.net/qq_40612211/article/details/101199846