首先顺着题目逻辑打表
打表代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int lowbit(int x)
{
return x&(-x);
}
int main()
{
int N;
int a[1007] = { 1,1 };
cin >> N;
while (N--)
{
for (int n = 2; n < 100; ++n)
a[n] = a[n - a[n - 1]] + a[n - 1 - a[n-2]];
int sum = 0;
for (int i = 0; i < 100; ++i)
{
sum += a[i];
cout << "a" << i + 1 << " = " << a[i] << " " << "SUM";
cout<< i + 1 << " = " << sum << " " << "lowbit(" << i + 1 << ") " << lowbit(i + 1) << endl;
}
}
system("pause");
return 0;
}
打表结果:
可以观察出第n个数出现次数是lowbit(n).
《关于lowbit函数》https://blog.youkuaiyun.com/qq853674765/article/details/70050306--醉醉Philip
由此可得:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int lowbit(int x)
{
return x&(-x);
}
int main()
{
int N;
cin >> N;
while (N--)
{
int n, j = 2;
int k = 1;
int sum;
cin >> n;
if (n > 2)
sum = 2;
else
sum = n;
for (int i = 2; i < n; ++i,++k)
{
sum += j;
if (k == lowbit(j))
{
++j;
k = 0;
}
}
cout << sum << endl;
}
system("pause");
return 0;
}