小蓝老师教的编程课有 N 名学生,编号依次是 1 . . . N。第 i 号学生这学期刷题的数量是 Ai。
对于每一名学生,请你计算他至少还要再刷多少道题,才能使得全班刷题比他多的学生数不超过刷题比他少的学生数。
第一行包含一个正整数 N。
第二行包含 N 个整数:A1, A2, A3, . . . , AN.
输出 NN 个整数, 依次表示第 1 \ldots N1…N 号学生分别至少还要再刷多少道题。
样例输入
5
12 10 15 20 6
样例输出
0 3 0 0 7
我使用的是C++语言,利用其#include < algorithm >可以使用sort函数直接对所输入的数值进行从大到小的顺序排列。
找到每一名学生,请你计算他至少还要再刷多少道题,才能使得全班刷题比他多的学生数不超过刷题比他少的学生数–这里需要注意的是当做题数相同时要进行+1的操作,才能满足条件
我的思路是首先定义一个变量,申请两个数组,存所输入的数值这是一般的操作,相信大家都会的,将输入的数组值存到另一个数组里,在这个新的数组里进行相关的操作
代码如下:
#include <iostream>
using namespace std;
#define maxn 100005
#include<algorithm>
int main()
{
int n;
int a[maxn];
int b[maxn];
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i];
}
sort(b+1,b+n+1);
int ans=-1;
int j=0;
for(int i=1;i<=n&&ans=-1;)
{
j=i++;
while(i<=n&&b[i]==b[i-1])
i++;
int l=j-1,r=n-i+1;//这里的i比j值大
if(l<r) continue;
else if(l>r) ans=b[j];
else ans=b[j]+1;
}
for(int i=1;i<=n;i++)
int need=0;
if(a[i]<b[j]) need= ans - a[i];
cout<<need<<" ";
}
return 0;
}