P9825
题目要求我们输出积为偶数时
观察斐波那契数列。前两个数都是奇数,所以第三个数就是偶数;前两个数一个奇数一个偶数,所以第四个数就是奇数;前两个数一个奇数一个偶数,所以第五个数也是奇数。
以此类推。我们很容易发现,如果将斐波那契数列三个分为一组,则每组的前两个数是奇数,最后一个数是偶数。
下一步需要另一个规律:一个偶数乘上另一个数,结果还是偶数,只有相乘的两个数都为奇数时,结果才是奇数。
于是思路就有了,先算出数列中奇数的个数,求出这么多数的组合方式数量,这就是积为奇数时
Code:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int o=(n/3*2)+(n%3);//表示奇数的个数
cout<<n*(n-1)/2-o*(o-1)/2;
return 0;
}