ZOJ Fibonacci in the Pocket

题目

在这里插入图片描述

思想

求斐波那契数列的[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;
}

猜你喜欢

转载自blog.csdn.net/m0_46198140/article/details/107861952