目录
1.求值法
2.递推法
3.递归法
4.枚举法
5.分治法
6.模拟法
7.贪心法
8.回溯法
9.构造法
10.动态规划法
1.求值法
1.1解题思想 :
根据题目给出的条件,运用基本的顺序,选择,循环控制结构解决问题的方法
1.2举例:
判断是否是闰年
进制间的转换
`````````
1.3代码举例:
题目:从键盘输入学生成绩,找出最高分,并且输出学生等级
90-100:A 80-90:B 70-80:C 其余D
package arrar;
import java.util.Scanner;
public class text2 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.print("请输入学生人数:");
int count = scan.nextInt();
System.out.printf("请分别输入%d个学生成绩",count);
int[] arr = new int[count];
for(int i = 0; i
运行结果:(java实现,可自由输入)
请输入学生人数:3
请分别输入3个学生成绩89 34 54
最高分是:89
学生0的分数是89,级别是A
学生1的分数是34,级别是D
学生2的分数是54,级别是D
Process finished with exit code 0
2.递推法
2.1解题思想:
根据之前的一步求解下一步和上一步之间的关系
2.2举例:
杨辉三角问题
回文数问题
`````````
2.3代码举例:
题目:回文数
package arrar;
//回形数
import java.util.Scanner;
public class text6 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
System.out.printf("输入数字是%d",num);
System.out.println(" ");
int[][] arr = new int[num][num];
int count = 1;
int count1 = 1;
int count2 = 0;
int count3 = 0;
int count4 = 0;
int count5 = num-1;
while(count != (num*num+1)){
switch(count1){
case 1:
arr[count2][count3] = count;
count++;
count3++;
count4++;
if(count4 == count5){
count4 = 0;
count1 = 2;
}
break;
case 2:
arr[count2][count3] = count;
count++;
count2++;
count4++;
if(count4 == count5){
count4 = 0;
count1 = 3;}
break;
case 3:
arr[count2][count3] = count;
count++;
count3--;
count4++;
if(count4 == count5){
count4 = 0;
count1 = 4;}
break;
case 4:
arr[count2][count3] = count;
count++;
count2--;
count4++;
if(count4 == count5){
count4 = 0;
count5-=2;
count2++;
count3++;
count1 = 1;}
break;
}
}
for(int i = 0;i
运行结果:(java实现,可自由输入)
4
输入数字是4
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Process finished with exit code 0
3.递归法
3.1解题思想:
一个过程或者函数在定义中直接或者间接调用自己的方法
3.2举例:
汉诺塔
求阶乘
``````````
3.3代码举例:
题目:计算阶乘
package arrar;
import java.util.Scanner;
public class text22 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你需要计算的阶乘");
int num = scanner.nextInt();
System.out.println(answer(num));
}
public static int answer(int num){
if(num == 0){
return 1;
}
else {
return num*answer(num-1);
}
}
}
运行结果:(java实现,可自由输入)
请输入你需要计算的阶乘
4
24
Process finished with exit code 0
4.枚举法
4.1解题思路:
将所有情况全部列举出来
4.2举例:
字符串匹配问题
最小公倍数问题
4.3代码举例:
问题:输入三个数,求最小公倍数
package arrar;
import java.util.Scanner;
public class text22 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入三个你需要计算的阶乘");
int num = scanner.nextInt();
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
System.out.println(answer(num,num1,num2));
}
public static int answer(int num,int num1,int num2){
int maxnum = 0;
if (num>num1){
maxnum = num;
}
else{
maxnum = num1;
}
if (maxnum
运行结果:(java实现,可自由输入)
请输入三个你需要计算的阶乘
2 3 5
30
Process finished with exit code 0
5.分治法
5.1解题思路:
把一个问题分成两个或者多个相似的子问题
5.2举例:
二叉树遍历
折半查找
6.模拟法
6.1解题思路:
通过对一件事的过程进行先后顺序的模拟
7.贪心法
7.1解题思路:
逐步获得最优解
7.2举例
哈夫曼树
构造最小生成树
8.回溯法
8.1解题思路:
可理解为从二叉树根节点出发找答案,中途(走不通就掉头)
9.构造法
9.1解题思路:
通过构造数学模型解决问题
10.动态规划法
10.1解题思路:
用于解决多阶段决策问题
10.2举例
青蛙跳出井需要的步骤(一步或者两步)
补充说明,内容未补充完全,后期补充
同时解题时有多种解法,具体解法看题目选择



