【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;
}
posted @ 2018-08-18 07:25  路明天  阅读(246)  评论(0编辑  收藏  举报