这道题其实能用数学解法轻松做出。
我们把数列分成
15
15
15个一组,每组有
8
8
8个数
所以
m
o
d
8
mod~8
mod 8就能求出在哪一位。
那在第几组呢?
因为是累加,所
n
/
8
∗
15
n/8*15
n/8∗15就好了!
仔细思考,发现需要特判
n
m
o
d
8
=
=
0
n~mod~8==0
n mod 8==0的情况
因为刚好存满了一组数列,所以可得出:
n
/
8
∗
15
−
1
n/8*15-1
n/8∗15−1。
A C C o d e AC~Code AC Code
//因为码量较少,所以没注释(逃
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
long long a[10]={0,1,2,4,7,8,11,13,14};
long long n,ans;
int main()
{
freopen("moobuzz.in","r",stdin);
freopen("moobuzz.out","w",stdout);
cin>>n;
if(n%8!=0)
ans=n/8*15+a[n%8];
else
ans=n/8*15-1;
cout<<ans;
return 0;
}