首先順着題目邏輯打表
打表代碼:
#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.csdn.net/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;
}