算法分类与进阶

算法分类与进阶,第1张

算法分类与进阶

目录

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举例

        青蛙跳出井需要的步骤(一步或者两步)

补充说明,内容未补充完全,后期补充

同时解题时有多种解法,具体解法看题目选择

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5574959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存