• PAT-乙级-1060 爱丁顿数


    英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数” E ,即满足有 E 天骑车超过 E 英里的最大整数 E。据说爱丁顿自己的 E 等于87。

    现给定某人 N 天的骑车距离,请你算出对应的爱丁顿数 E(≤N)。

    输入格式:

    输入第一行给出一个正整数 N (≤105),即连续骑车的天数;第二行给出 N 个非负整数,代表每天的骑车距离。

    输出格式:

    在一行中给出 N 天的爱丁顿数。

    输入样例:

    10
    6 7 6 9 3 10 8 2 7 8
    

    输出样例:

    6



    分析:
      开一个数组,保存大于下标的天数
      在数组中找到符合要求的即可
      PS:
        由于复杂度为O(N^2)
        有一个测试无法通过

     1 //c++
     2 
     3 #include <stdio.h>
     4 #define MAX 150000
     5 
     6 int main(){
     7   int n,x;
     8   scanf("%d",&n);
     9   int arr[MAX]={0};
    10   for(int i=0;i<n;i++){
    11     scanf("%d",&x);
    12     for(int j=0;j<x;j++)
    13       arr[j]++;
    14   }
    15   for(int i=n;arr[i]>=0;i--){
    16     if(arr[i]>=i){
    17       printf("%d",i);
    18       break;
    19     }
    20   }
    21   return 0;
    22 }

    分析二:

      要低于O(N^2)的复杂度

      只能使用快排将数据排列

      找到符合题意的值

     1 //c99
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 int cmp(const void *a, const void *b) {
     7     return *(int *)b - *(int *)a;//降序 
     8 }
     9 int main(){
    10     int N;
    11     scanf("%d", &N);
    12     int d[N];
    13     for (int i = 0; i < N; i++) {
    14         scanf("%d", &d[i]); 
    15     }
    16     qsort(d, N, sizeof(int), cmp);//降序排序 
    17     int E = 0;
    18     while (d[E] > E + 1 && E < N) {
    19         E++;
    20     }
    21     printf("%d
    ", E);
    22     return 0;
    23 }



  • 相关阅读:
    LinkedListQueue
    LinkedListStack
    redis学习之——Redis事务(transactions)
    redis学习之——持久化RDB 和AOF
    redis学习之——redis.conf配置(基本)文件学习
    评估算法的核心指标
    Vector类
    List接口与ArrayList、LinkedList实现类
    Collection接口
    枚举类
  • 原文地址:https://www.cnblogs.com/tenjl-exv/p/10080164.html
Copyright © 2020-2023  润新知