分治算法 所谓分治就是指的分而治之即将较大规模的问题分解成几个较小规模的问题通过对较小规模问题的求解达到对整个问题的求解当我们将问题分解成两个较小问题求解时的分治方法称之为二分法
分治的基本思想是将一个规模为n的问题分解为k个规模较小的子问题这些子问题互相独立且与原问题相似找出各部分的解然后把各部分的解组合成整个问题的解
提示:以下是本篇文章正文内容,仅可供参考
练习使用分治算法解决实际问题(使用Java语言实现)。
二、实验内容
【问题描述】
有这样一种斐波那契数列:F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2)。
【输入】
输入由一系列行组成,每行包含一个整数 n。 (n < 1,000,000)
【输出】
如果 F(n)能被3整除,则打印单词“yes”。 如果不能,则打印“no”。
【样例输入】
0 1 2 3 4 5
【样例输出】
no no yes no no no
在使用分治算法时,将较大规模的问题分解成几个较小规模的问题通过对较小规模问题的求解达到对整个问题的求解。
在本题中,通过找规律的方式,发现该斐波那契数列生成的每八个数的第二个和第六个可被3整除,因此只需要判断要求判断的数是否符合规律即可。
n | f(x) | 余数 |
---|---|---|
0 | 7 | 1 |
1 | 11 | 2 |
2 | 18 | 0 |
3 | 29 | 2 |
4 | 47 | 2 |
5 | 76 | 1 |
6 | 123 | 0 |
7 | 199 | 1 |
8 | 322 | 1 |
9 | 521 | 2 |
10 | 843 | 0 |
11 | 1364 | 2 |
12 | 2207 | 2 |
13 | 3571 | 1 |
14 | 5778 | 0 |
15 | 9349 | 1 |
————————————————
代码如下:
package OperaTion; public class Result {//构建一个结果的类 public String out;//用于存储判断后的结果YES/NO。 public Result(){ } }
代码如下:
package OperaTion; import java.util.Scanner; public class Method { private int i=0; Result[] result; public void judge(int n){//通过对该斐波那契数列的研究 result[i]=new Result();//初始化数组 if(n%8==2||n%8==6){//每八个数是一个循环数列 result[i].out="yes";//第二个和第六个可以被3整除 }else{ result[i].out="no"; } i++;//将结果存入结果数组中 } public void menu(){//菜单函数 System.out.print("请输入将要运算的数的个数:"); Scanner scanner =new Scanner(System.in); int x =scanner.nextInt(); result=new Result[x];//初始化数组 int n; for(int i=0;i<x;i++){ System.out.print("请输入第"+(i+1)+"个数:"); n =scanner.nextInt(); judge(n);//调用判断函数 } } public void getresult(){//输出存入结果数组中的结果 System.out.println("能否被3整除:"); for(int i=0;i<result.length;i++){ System.out.print("第"+(i+1)+"个数:"); System.out.println(result[i].out); } } }
package Domain; import OperaTion.Method; public class domain { public static void main(String[] args){ Method method =new Method(); method.menu();//菜单函数 method.getresult();//输出结果 } }
内容仅供参考,希望各位要摘抄的小伙伴能够进行改写,拓宽思路!
完整工程文件请关注以下公众号进行获取: