java算法-斐波那契数列四吧(公式递推,不定方程求解)
2017-02-06 17:51
176 查看
斐波那契数列四吧
时间限制:3000 ms | 内存限制:65535 KB
难度:2
描述
斐波那契数列为:0,1,1,2,3,5,8,13....,常规递推公式为f(n)=f(n-1)+f(n-
2);
但这里不一样的是,我们的前两个数字不一定是0,1;
也就是说,斐波那契数列的前两个数字是随机数(保证是非负整数)。下面我们
开始吧,我会告诉你斐波那契数列的第20项的值m,请你判断是否会有这样的数列
存在。
对了,你要保证数列的每一项都是整数哦
输入第一行呢,按照惯例我们输入一个数字N,表示测试数据组数。
接下来肯定就有N行了。。
每行包含一个整数m(m<10000000),表示数列的第20项的值。输出如果存在这
样的数列呢,输出该数列的第一项和第二项的值
else 输出“No answer”
每组数据输出后换行。
样例输入1
1000000
样例输出154 144
/*
* 斐波那契数列四吧
* 思路:有题意知
* f(3)=f(1)+f(2)
* f(4)=f(1)+2f(2)
* f(5)=2 3
* f(6)=3 5
* .....
* 这里可以写个递推推程序求出f(20)公式
*/
public class Main {
public static void main(String[] args) {
int a = 1, b = 1, temp;
for (int i = 3; i <= 20; i++) {
System.out.println(i + "=" + a + " " + b);
temp = b;
b = a + b;
a = temp;
}
}
}
运行结果:
3=1 1
4=1 2
5=2 3
6=3 5
7=5 8
8=8 13
9=13 21
10=21 34
11=34 55
12=55 89
13=89 144
14=144 233
15=233 377
16=377 610
17=610 987
18=987 1597
19=1597 2584
20=2584 4181
/*
* 这里可以看到f(20)=2584*f(1)+4181*f(2)
* 做到这里大家明白此题了吧,就是不定方程求解问题
* 把上边的公式变换得
* f(2)=(f(20)-2584f(1))/4181
* 然后判断f(2)是否是整数
* 程序如下:
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int f1, f2, f20, temp;
while (n-- > 0) {
f20 = sc.nextInt();
f1 = 0;
while (true) {
temp = f20 - 2584 * f1;
// f1过大跳出循环没有答案
if (temp < 0) {
System.out.println("No
answer");
break;
} else {// 判断f2是否为整数
if (temp % 4181 == 0) {
f2 = temp / 4181;
System.out.println(f1
+ " " + f2);
break;
}
}
f1++;
}
}
sc.close();
}
}
时间限制:3000 ms | 内存限制:65535 KB
难度:2
描述
斐波那契数列为:0,1,1,2,3,5,8,13....,常规递推公式为f(n)=f(n-1)+f(n-
2);
但这里不一样的是,我们的前两个数字不一定是0,1;
也就是说,斐波那契数列的前两个数字是随机数(保证是非负整数)。下面我们
开始吧,我会告诉你斐波那契数列的第20项的值m,请你判断是否会有这样的数列
存在。
对了,你要保证数列的每一项都是整数哦
输入第一行呢,按照惯例我们输入一个数字N,表示测试数据组数。
接下来肯定就有N行了。。
每行包含一个整数m(m<10000000),表示数列的第20项的值。输出如果存在这
样的数列呢,输出该数列的第一项和第二项的值
else 输出“No answer”
每组数据输出后换行。
样例输入1
1000000
样例输出154 144
/*
* 斐波那契数列四吧
* 思路:有题意知
* f(3)=f(1)+f(2)
* f(4)=f(1)+2f(2)
* f(5)=2 3
* f(6)=3 5
* .....
* 这里可以写个递推推程序求出f(20)公式
*/
public class Main {
public static void main(String[] args) {
int a = 1, b = 1, temp;
for (int i = 3; i <= 20; i++) {
System.out.println(i + "=" + a + " " + b);
temp = b;
b = a + b;
a = temp;
}
}
}
运行结果:
3=1 1
4=1 2
5=2 3
6=3 5
7=5 8
8=8 13
9=13 21
10=21 34
11=34 55
12=55 89
13=89 144
14=144 233
15=233 377
16=377 610
17=610 987
18=987 1597
19=1597 2584
20=2584 4181
/*
* 这里可以看到f(20)=2584*f(1)+4181*f(2)
* 做到这里大家明白此题了吧,就是不定方程求解问题
* 把上边的公式变换得
* f(2)=(f(20)-2584f(1))/4181
* 然后判断f(2)是否是整数
* 程序如下:
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int f1, f2, f20, temp;
while (n-- > 0) {
f20 = sc.nextInt();
f1 = 0;
while (true) {
temp = f20 - 2584 * f1;
// f1过大跳出循环没有答案
if (temp < 0) {
System.out.println("No
answer");
break;
} else {// 判断f2是否为整数
if (temp % 4181 == 0) {
f2 = temp / 4181;
System.out.println(f1
+ " " + f2);
break;
}
}
f1++;
}
}
sc.close();
}
}
相关文章推荐
- Java算法--递推算法 求解兔子产子问题或斐波那契数列问题
- POJ - 2142 The Balance(扩展欧几里得求解不定方程)
- 使用递推和递归解决斐波那契数列问题~~~
- POJ NOI MATH-7650 不定方程求解(Bailian4139)
- YT03-递推求解课堂题目-1002 折线分割平面-(6.7日-烟台大学ACM预备队解题报告)
- 刷清橙OJ--A1059.求解二元整数不定方程
- 九度OJ 1205 N阶楼梯上楼问题 -- 动态规划(递推求解)
- 第五届蓝桥杯练习系统往届试题公式求解试题及参考答案---田野上的稻草人
- python求解斐波那契数列
- 约瑟夫环问题的递推和递归求解
- Java算法---华为oj迷宫问题求解(广度优先搜索)
- java算法-01串(斐波那契数列)
- 线性代数求解递推形式数列的通项公式
- Fibonacci hdu1568 斐波那契数列公式的应用-前四位
- poj——2142(数论之不定方程求解)
- 递归求解斐波那契数列
- 斐波那契数列 递推 递归 备忘录 动态规划
- 直线分割圆-公式递推
- 关于求解不定方程的n(n-1)=2m(m-1)的解法的总结
- YT03-递推求解课堂题目-1003 献给杭电五十周年校庆的礼物-(6.7日-烟台大学ACM预备队解题报告)