【PAT】B1060 爱丁顿数(25 分)
逻辑问题,对我来说还是挺有难度的,一开始想不通
我输入数据并以数据为下标,数据出现次数为内容存储
然后从后遍历计算所有大于当前下标的元素出现的次数
最后遍历一遍确定是否为爱丁顿数,如果大于当前已经找到的就替换,最后输出最大值
#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;
}
大佬忽略,见笑。