枚举(穷举)算法
枚舉(窮舉)算法
枚舉法的本質(zhì)就是從候選答案中去搜索正確的解,
使用該算法需要滿足兩個條件:
- 可預(yù)先確定候選答案的數(shù)量
- 候選答案的范圍在求解之前必須有一個確定的集合。
例: 填數(shù)字游戲
ABCDE
X ????? E
————
EEEEEE
問A,B,C,D,E各為多少?
代碼如下:
例: 填運(yùn)算符
5 [運(yùn)算符1] 5 [運(yùn)算符2] 5 [運(yùn)算符3] 5 [運(yùn)算符4] 5 = 5
問運(yùn)算符各位啥滿足等式,且該等式不能用括號。
代碼如下:
#include<stdio.h> int main() {int j,i[5];循環(huán)變量,數(shù)組i用來表示4個運(yùn)算符int sign;//累加運(yùn)算時的符號int result;//保存運(yùn)算式的結(jié)果值int count=0;//計(jì)數(shù)器,統(tǒng)計(jì)符合條件的方案int num[6];//保存操作數(shù)float left,right;//保存中間結(jié)果char oper[5]={' ','+','-','*','/'};//運(yùn)算符printf("請輸入5個數(shù): ");for(j=1;j<=5;j++){scanf("%d",&num[j]);}printf("請輸入結(jié)果:");scanf("%d",&result);//循環(huán)4種運(yùn)算符,1表示+,2表示-,3表示*,4表示'\'for(i[1]=1;i[1]<=4;i[1]++)//第一個操作符{if( (i[1]<4) || (num[2]!=0) )//運(yùn)算符是'/'且除數(shù)是0不滿足{for(i[2]=1;i[2]<=4;i[2]++)//第二個操作符{if( (i[2]<4) || (num[3]!=0) )//運(yùn)算符是'/'且除數(shù)是0不滿足{for(i[3]=1;i[3]<=4;i[3]++)//第三個操作符{if( (i[3]<4) || (num[4]!=0) )//運(yùn)算符是'/'且除數(shù)是0不滿足{for(i[4]=1;i[4]<=4;i[4]++)//第四個操作符{if( (i[4]<4) || (num[5]!=0) )//運(yùn)算符是'/'且除數(shù)是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;//通過sign=-1實(shí)現(xiàn)減法case '*':right=right*num[j+1];break;case '/':right=right/num[j+1];//實(shí)現(xiàn)除法break;}}if(left+sign*right==result){count++;printf("%3d: ",count);for(j=1;j<=4;j++){printf("%d%c",num[j],oper[i[j]]);}printf("%d=%d\n",num[5],result);}}}}}}}}}if(count==0){printf("沒有符合要求的方法\n");} }總結(jié)
- 上一篇: PKI概述
- 下一篇: 用思科网络模拟器搭建一个简单的局域网