八大算法思想分别是:枚举、递推、递归、分治、贪心、试探法、动态迭代和模拟算法思想。

1、比较“笨”的枚举算法思想

    枚举最大的缺点是运算量比较大,解题效率不高。

如果题目的规模不是很大,在规定的时间与空间限制内能够求出解,那么最好是采用枚举法,而无须太在意是够还有更快的算法,这样可以使你有更多的时间去解答其他难题。

//枚举法解决“填写运算符”的问题
import java.util.Scanner;

public class meijujisuan5ge5 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int j;
        int[] i=new int[5];  //用数组i来表示4个运算符 (5个数之间有四个符号,分别遍历出所有的情况)
        int sign;//累加运算时的符号
        int count=0;//计数器,统计符合条件的方案
        int num[]=new int[6];//保存操作数(输入值)
        float left,right;
        char[] oper={' ','+','-','*','/'};
        System.out.println("请输入5个数,之间用空格隔开:");
        Scanner in=new Scanner(System.in);
        for(j=1;j<=5;j++){
            num[j]=(int)in.nextInt();
        }
        System.out.println("请输入结果:");
        int result=(int)in.nextInt();
        for(i[1]=1;i[1]<=4;i[1]++){//循环4中运算符,1表示+,2表示-,3表示*,4表示/
            if(i[1]<4||num[2]!=0){//运算符若是、,则第二个运算数不能是0
                for(i[2]=1;i[2]<=4;i[2]++){
                    if(i[2]<4||num[3]!=0){
                        for(i[3]=1;i[3]<=4;i[3]++){
                            if(i[3]<4||num[4]!=0){
                                for(i[4]=1;i[4]<=4;i[4]++){
                                    if(i[4]<4||num[5]!=0){
                                        left=0;
                                        right=num[1];
                                        sign=1;
                                        for(j=1;j<=4;j++){
                                            switch(oper[i[j]]){
                                                case'+':
                                                    left=left+sign*right;
                                                    sign=1;
                                                    right=num[j+1];
                                                    break;
                                                case'-':
                                                    left=left+sign*right;
                                                    sign=-1;
                                                    right=num[j+1];
                                                    break;
                                                case'*':
                                                    right=right*num[j+1];
                                                    break;
                                                case'/':
                                                    right=right/num[j+1];
                                                    break;
                                            }
                                        }
                                        if(left+sign*right==result){
                                            count++;
                                            System.out.print(count+": ");
                                            for(j=1;j<=4;j++){
                                                System.out.print(num[j]);
                                                System.out.print(oper[i[j]]);
                                            }
                                            System.out.println(num[5]+"="+result);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
枚举算法举例代码

相关文章:

  • 2021-11-13
  • 2021-11-04
  • 2022-12-23
  • 2022-12-23
  • 2021-12-12
  • 2021-08-10
猜你喜欢
  • 2022-12-23
  • 2021-10-02
  • 2021-11-15
  • 2021-06-27
  • 2022-12-23
相关资源
相似解决方案