B3876 [信息与未来 2015] 中间值 题解

· · 题解

看到这一题,首先想到的就是用一个数组吧?不过仔细一想,好像不需要。为什么呢?因为 a_i=i,你不管想输出哪一个数字,你直接输出就行了。因为 a_i=i,所以输出 i 就是输出 a_i

那就好办了,只需找最中间的数字不就好了?

我们来举一个例子来推理。

n=5

1 2 3 4 5

不难发现,最中间的数字是三,在观察他的位置,会发现他在 a_{n \div 2+1} 这里,也就是 n \div 2+1。正好等于三,那么我们不仅把开头说到的证明了,而且知道了 n 中间是 n \div 2+1

然后我们处理下一个问题,如果 n 为偶数,中间的两个数是什么呢?依旧是举例子。

n=4

1 2 3 4

我们会发现,中间两个数是 2 和 3。2 是 n \div 2,3 是 n \div 2+1。那么我们就知道了中间那个数是几,最后加起来就好了。

看,我们通过举例子成功推断出来了这道题。所以以后做题也可以通过举例子来做。

#include<bits/stdc++.h>
using namespace std;
long long n;
int main(){
    cin>>n;
    if(n%2!=0){
        cout<<(n+1)/2<<endl;
    }else if(n%2==0){
        cout<<n/2+n/2+1<<endl;
    }
    return 0;
}