目录
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<count; i++) {
arr[i] = scan.nextInt();
}
int ans = 0;
for(int i = 0;i<count;i++){
if(ans<=arr[i]){
ans = arr[i];
}
}
System.out.println("最高分是:"+ans);
for(int i = 0;i<count;i++){
switch(arr[i]/10){
case 9:
System.out.printf("学生%d的分数是%d,级别是A",i,arr[i]);
System.out.println("");
break;
case 8:
System.out.printf("学生%d的分数是%d,级别是A",i,arr[i]);
System.out.println("");
break;
case 7:
System.out.printf("学生%d的分数是%d,级别是B",i,arr[i]);
System.out.println("");
break;
case 6:
System.out.printf("学生%d的分数是%d,级别是C",i,arr[i]);
System.out.println("");
break;
default:
System.out.printf("学生%d的分数是%d,级别是D",i,arr[i]);
System.out.println("");
break;
}
}
}
}
运行结果:(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<num;i++){
for(int j = 0;j < num;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println(" ");}
}
}
运行结果:(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<num2){
maxnum = num2;
}
while(true){
if(maxnum%num==0){
if(maxnum%num1==0){
if(maxnum%num2==0){
return maxnum;
}
}
}
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举例
? ? ? ? 青蛙跳出井需要的步骤(一步或者两步)
补充说明,内容未补充完全,后期补充
同时解题时有多种解法,具体解法看题目选择
|