链接:https://www.nowcoder.com/questionTerminal/0984adf1f55a4ba18dade28f1ab15003
来源:牛客网
NowCoder最近在研究一个数列:
* F(0) = 7
* F(1) = 11
* F(n) = F(n-1) + F(n-2) (n≥2)
他称之为NowCoder数列。请你帮忙确认一下数列中第n个数是否是3的倍数。
输入描述:
输入包含多组数据。 每组数据包含一个整数n,(0≤n≤1000000)。
输出描述:
对应每一组输入有一行输出。 如果F(n)是3的倍数,则输出“Yes”;否则输出“No”。
一开始我用的这个方法,发现运行超时:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/****
* F(0) = 7
* F(1) = 11
* F(n) = F(n-1) + F(n-2) (n≥2)
*****/
int F(int i){
if(i==0)
return 7;
else if(i==1)
return 11;
else
return F(i-1)+F(i-2);
}
void main(){
int a[500],b;
while(scanf("%d",&b)!=EOF){
if(F(b)%3==0)
printf("Yes\n");
else
printf("No\n");
}
}
后来看了下别人的解法,发现需要找一下规律:
即 (N-2)%4==0 的时候F(n)能被3整除
所以代码为:
#include<stdio.h>
int main(void){
int input;
while(scanf("%d", &input)!=EOF){
if(2 == input % 4){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}
顿时傻眼。。。感谢发现规律的作者