题目
思想
求斐波那契数列的[a,b]范围数列数值之和的奇偶性。
首先,我们可以先求出[1,a-1]范围数列和和[1, b]范围数列和的奇偶性。对于两个数列和的奇偶性分别赋值af和bf(偶为0,奇为1)。af和bf有四种情况。其中af和bf一奇一偶的情况下,表明[a,b]范围数列和为奇;另一种af和bf同奇同偶的情况下,表明[a,b]数列和为偶。
然后,我们需要了解求得[1, i]范围数列和的奇偶性的方法。如何求呢?斐波那契数列是一个三数奇偶循环的数列——奇奇偶。同时也表述循环数列和的为偶数,那么我们可以将[1, i]范围数列分为[1, j]和[j+1, i]范围数列(当i%30,ji,[j+1, i]将不考虑)。[1, j]范围数列和一定为偶数,只要求[j+1, i]范围数列和的奇偶性就行了。
最后,由于a和b的上限值过大,我们将用char数组存储数值。
代码
#include<stdio.h>
#include<string.h>
#define MaxSize 10000
char num[MaxSize];
int qy(int xh)
{
scanf("%s", num);
int a=0;
for(int i=0; i<strlen(num); i++){
a = a*10 + (int)num[i];
a %= 3;
}
if(xh==1){
if(a==1 || a==0)
return 0;
else
return 1;
}
else{
if(a==2 || a==0)
return 0;
else
return 1;
}
}
int main(void)
{
int tests;
scanf("%d", &tests);
while(tests--){
int a = qy(1);
int b = qy(2);
if((a+b)%2)
printf("1\n");
else
printf("0\n");
}
return 0;
}