填数字玩游戏——穷举法演示

来源:互联网 发布:微信抽奖软件 编辑:程序博客网 时间:2024/06/13 01:38




# include <stdio.h>int main(){int i1,i2,i3,i4,i5;int num1,num2;for(i1=1;i1<=9;i1++){for(i2=0;i2<=9;i2++){for(i3=0;i3<=9;i3++){for(int i4=0;i4<=9;i4++){for(int i5=0;i5<=9;i5++){num1 = i5*1+i4*10+i3*100+i2*1000+i1*10000;num2 = i5*1+i5*10+i5*100+i5*1000+i5*10000+i5*100000;if(num1*i1==num2){printf("   %d %d %d %d %d\n",i1,i2,i3,i4,i5);printf("X          %d\n",i1);printf("—————————\n");printf(" %d %d %d %d %d %d\n",i5,i5,i5,i5,i5,i5);}}}}}}printf("\n");return 0;}
2,填运算符


# include <stdio.h>int main(){int i[5],j;//i存+-*/(4个有效运算符),循环变量、int sign;//运算累加时的符号(代表下一个运算符)int count =0;//累加器,统计符合条件的方案;int num[6];//保存5个有效数字int result;//最终结果float left,right;//保存中间结果char oper[5]={' ','+','-','*','/'};printf("请输入5个数:\n");for(j=1;j<=5;j++){scanf("%d",&num[j]);}printf("请输入结果:\n");scanf("%d",&result);//循环4种运算符,1表示+,2表示-,3表示*,4表示/ i[1],表示第一个运算符for(i[1]=1;i[1]<=4;i[1]++){if(i[1]<4 || num[2]!=0){//该运算符不能为/,或者第2个数不能为0.即不能出现 /0的情况for(i[2]=1;i[2]<=4;i[2]++) //i[2]表示第2个运算符{if(i[2]<4 || num[3]!=0){for(i[3]=1;i[3]<=4;i[3]++)//i[3]表示第3个运算符{if(i[3]<4 || num[4]!=0){for(i[4]=1;i[4]<=4;i[4]++)//i[4]表示第4个运算符{if(i[4]<4 || num[5]!=0){left = 0;//将最左边的第一位数字设置为0right= num[1];//将第一位有效数字赋值给rightsign = 1;//计算出left 和 right值for(j=1;j<=4;j++){switch(oper[i[j]]){case '+':left = left+right*sign;//因为+-的级别低于*/,所以本次运算结束sign = 1;//下一次运算+号,则为正,若下下次运算符依然为+-,则下次运算+-right= num[j+1];//运算结束,指针后移 break;case '-':left = left+right*sign;//因为+-的级别低于*/,所以本次运算结束sign = -1;//下一次运算-号,则为负,若下下次运算符依然为+-,则下次运算+-right= num[j+1];//运算结束,指针后移 break;case '*':right = right*num[j+1];//*/的优先级高于+-,所以本次运算*break;case '/':right = right/num[j+1];break;}}//统计结果//结果分析:若程序中存在+-号,则最终将运算加减号,若不存在+-号,则将等式左边的两数去和if(left+right*sign ==result){count++;//统计结果+1printf("%3d: ",count);for(j=1;j<=4;j++){//i值根据外循环次数确定,j根据本次循环确定printf("%d %c",num[j],oper[i[j]]);}printf("%d = %d\n",num[5],result);}}}}}}}}}if(count==0){printf("无结果满足要求!");}else{printf("总结果:%3d: \n",count);}return 0;}



0 0
原创粉丝点击