八大算法思想分别是:枚举、递推、递归、分治、贪心、试探法、动态迭代和模拟算法思想。
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); } } } } } } } } } } }