题目描述
NowCoder最近在研究一个数列:
* F(0) = 7
* F(1) = 11
输入描述:
输入包含多组数据。
每组数据包含一个整数n,(0≤n≤1000000)。
输出描述:
对应每一组输入有一行输出。
如果F(n)是3的倍数,则输出“Yes”;否则输出“No”。
输入例子:
0
1
2
3
4
5
输出例子:
No
No
Yes
No
No
No
时间限制 3000 ms 内存限制 32768 KB 代码长度限制 100 KB
f(n)=3f(n-1)+2f(n-4)
只要f(n-4)是3的倍数,那么f(n)就一定是3的倍数
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
while(cin.hasNextInt())
{
int n=cin.nextInt();
if ((n-2)%4==0)
{
System.out.println("Yes");
}
else {
System.out.println("No");
};
}
}
}
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”。
输入例子:
0
1
2
3
4
5
输出例子:
No
No
Yes
No
No
No
时间限制 3000 ms 内存限制 32768 KB 代码长度限制 100 KB
最开始采用递归法和循环来求解每一个N对应的数值,然后在求是否为3的倍数,都超过时间限制,说明去求解每一个n的值是行不通的,所以想到了去找每一个数的规律。
正确解法:f(n)=3f(n-1)+2f(n-4)
只要f(n-4)是3的倍数,那么f(n)就一定是3的倍数
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
while(cin.hasNextInt())
{
int n=cin.nextInt();
if ((n-2)%4==0)
{
System.out.println("Yes");
}
else {
System.out.println("No");
};
}
}
}