PAT 乙级 1060 爱丁顿数(25) C++版

1060. 爱丁顿数(25)

时间限制
250 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数”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

其实刚开始看到这题给我的感觉是难度怎么会有0.2???不应该很简单吗???但结果真的让人无奈,要考虑的太多了

接下来我就说几个样例
1
1
0(不是1)

5
10 9 8 7 6
5

5
10 9 8 7 5
4

4
5 5 5 5
4

6
5 5 5 5 5 5
4


代码如下
 1 // 1060.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<iostream>
 6 #include<vector>
 7 #include<algorithm>
 8 
 9 using namespace std;
10 
11 int main()
12 {
13     vector<int> v;
14 
15     int N,num,j=0;
16 
17     cin >> N;
18 
19     for (int j = 0; j < N; j++)
20     {
21         cin >> num;
22         v.push_back(num);
23     }
24 
25     vector<int>::reverse_iterator ri, rbegin = v.rbegin(), rend = v.rend();
26     int size = v.size();
27 
28     sort(rbegin, rend);//对进入向量内的元素进行排序,大的在前面
29 
30     if (v[0] == v[size - 1] && size > 1 && v[0] > 1)//处理全部相等且个数大于1和数值大于1
31         cout << v[0] - 1 << endl;
32     else if (v[0] == v[size - 1] && v[0] <= 1)//处理全为0或者全为1的情况
33         cout << 0 << endl;
34     else if (v[size - 1] > size)//所有的值都大于总天数
35         cout << size << endl;
36     else if (v[size - 1] == size)//最小数等于总天数
37         cout << size-1 << endl;
38     else//一般情况
39     {
40         for (j = 0; j<size; j++)
41         {
42             if (j + 1 > v[j] && v[j - 1] != v[j])
43                 break;
44             else
45                 continue;
46         }
47 
48         cout << v[j-1]-1 << endl;
49 
50     }
51 
52     return 0;
53 }
原文地址:https://www.cnblogs.com/cdp1591652208/p/7220196.html