枚举小结
来源:互联网 发布:校园网络海报 编辑:程序博客网 时间:2024/06/06 09:11
一想到枚举,就是暴力,近日在看算法书,感觉厘清思想比较重要,所以来写下一点自己的感想。
例题:
在 a b c d e = f (a~f为0~9)) 中添加+、-、*、/ 号来使得等式成立。
分析该式子,由5个数构成的算式,一共需要填入4个运算符,注意点:
1、除法分母不为0
2、乘除法运算级别优先于加减法
思路: 两个变量 left 和 right 分别保存上次运算结果(下次运算的左侧内容)和下次参加运算的数据(下次运算的右侧内容)
比如 5 + 5 - 5 * 5 / 5 = 5,left = 5 + 5 right = 5 * 5 / 5
#include <cstdio>#include <cstring> char op[5]={' ','+','-','*','/'};int num[10];int main(){int i[5],j,temp,result,ans=0;printf("请输入5个数:");for(j=1;j<=5;j++) scanf("%d",&num[j]); printf("请输入结果:"); scanf("%d",&result); double left,right; for(i[1]=1;i[1]<=4;i[1]++) //循环四种运算符,1表示 +,2表示 —,3表示 *,4表示 / { if(i[1]<4 || num[2]!=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]; temp=1; for(j=1;j<=4;j++) { switch(op[i[j]]) { case '+': left=left+temp*right; temp=1; right=num[j+1]; break; case'-': left=left+temp*right; temp=-1; right=num[j+1]; break; case'*': right=right*num[j+1]; break; case'/': right=right/num[j+1]; break; } } if(left+temp*right==result) { ans++; printf("%3d: ",ans); for(j=1;j<=4;j++) { printf("%d%c",num[j],op[i[j]]); } printf("%d=%d\n",num[5],result); } } } } } } }}} if(ans==0)printf("没有符合要求的方法\n");return 0; }
0 0
- 枚举小结
- 枚举小结
- 枚举小结
- 枚举小结
- 枚举小结
- 枚举类型小结
- 枚举类小结
- C# 枚举小结
- 枚举应用小结 嘿嘿~
- C枚举类型小结
- Java枚举类型小结
- 枚举类型小结
- java枚举用法小结
- JAVA枚举小结
- c# enmu 枚举小结(1)
- 黑马程序员_枚举小结
- 结构体枚举的小结
- 黑马程序员_枚举小结
- Android Studio 中使用Lambda
- 码农小汪-spring框架学习之1-spring简单的介绍入门
- 【matlab】meshgrid生成网格原理1
- 拖拽上传图片--文件
- Android长时间及连续两次按BackUp按键退出程序
- 枚举小结
- [J2EE]java批量修改视频文件名
- Log4j全面详解
- 解决win8.1 连不上无线的方法
- 第十题(2016.4.9)
- java多态实例
- 直方图规定化
- 数据结构之字符串
- Thread类常用方法