【PAT】B1060 爱丁顿数(25 分)

时间:2022-04-12 11:48:40

逻辑问题,对我来说还是挺有难度的,一开始想不通

我输入数据并以数据为下标,数据出现次数为内容存储

然后从后遍历计算所有大于当前下标的元素出现的次数

最后遍历一遍确定是否为爱丁顿数,如果大于当前已经找到的就替换,最后输出最大值

#include<stdio.h>
#include<algorithm>
using namespace std; int data[1000005]={0}; int main(){
int N;scanf("%d",&N);
for(int i=0;i<N;i++){
int temp; //输入
scanf("%d",&temp);
data[temp]++;
}
for(int i=1000003;i>=0;i--) //计算天数
data[i]+=data[i+1];
for(int i=1000003;i>=0;i--) //计算所有爱丁顿数
data[i]= data[i]<i-1?data[i]:i-1;
sort(data,data+1000005);
printf("%d",data[1000004]);
return 0;
}