【PAT刷题甲级】1117.Eddington Number

这篇博客介绍了一个与英国天文学家Eddington有关的数学概念——Eddington数,即骑行超过自身距离天数的最大整数。文章给出了一个C++程序,用于根据输入的骑行天数和每天的距离,计算对应的最大Eddington数。程序通过排序和计数策略找到符合条件的最大整数。
摘要由CSDN通过智能技术生成

1117 Eddington Number (25 分)

British astronomer Eddington liked to ride a bike. It is said that in order to show off his skill, he has even defined an “Eddington number”, E – that is, the maximum integer E such that it is for E days that one rides more than E miles. Eddington’s own E was 87.

Now given everyday’s distances that one rides for N days, you are supposed to find the corresponding E (≤N).

Input Specification

Each input file contains one test case. For each case, the first line gives a positive integer N (≤10 ^5), the days of continuous riding. Then N non-negative integers are given in the next line, being the riding distances of everyday.

Output Specification

For each case, print in a line the Eddington number for these N days.

Sample Input

10
6 7 6 9 3 10 8 2 7 8

Sample Output

6

题意

寻找Eddington数字:符合E天中骑行超过E公里条件最大的数。
注意第4个测试点:超过0公里的天数是n。

代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int num[100001]; //超过i公里的天数
int main() {
	int n,maxx=-1;
	scanf("%d",&n);
	vector<int> v(n+1);
	for(int i=1; i<=n; i++) {
		scanf("%d",&v[i]);
	}
	sort(v.begin()+1,v.end());
	num[0]=n;
	for(int i=1; i<=n; i++) {
		int j=1;
		while(v[j]<=i)	j++;
		num[i]=n+1-j;
	}
	for(int i=0; i<=n; i++) {
		if(num[i]>=i) {
			if(i>maxx)	maxx=i;
		}
	}
	printf("%d",maxx);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值