C++之小学奥数(1)
来源:互联网 发布:js私有属性 编辑:程序博客网 时间:2024/04/28 06:19
题目描述:
ABCD
* E
DCBA
按以上格式输出ABCDE的值(A!=B&&A!=C&&A!=D&&A!=E&&B!=C&&B!=D&&B!=E&&C!=D&&C!=E&&D!=E)。
解题思路:
看到这道题之后,许多人想到的是枚举,就像这样:
#include<iostream>using namespace std;int main() { for(int A=1;A<10;A++) //首位不为0for(int B=0;B<10;B++)for(int C=0;C<10;C++)for(int D=1;D<10;D++) //首位不为零for(int E=1;E<10;E++) //首位不为零if((A*1000+B*100+C*10+D)*E==D*1000+C*100+B*10+A&&A!=B&&A!=C&&A!=D&&A!=E&&B!=C&&B!=D&&B!=E&&C!=D&&C!=E&&D!=E)cout<<A<<B<<C<<D<<endl<<"* "<<E<<endl<<"----"<<endl<<D<<C<<B<<A<<endl;}
或者这样:
#include<iostream>using namespace std;int main() { for(int num=1000;num<10000;num++) //列举ABCDfor(int E=1;E<10;E++){int A=num/1000,B=num/100%10,C=num/10%10,D=num%10; //定义A,B,C,Dif(num*E==D*1000+C*100+B*10+A&&A!=B&&A!=C&&A!=D&&A!=E&&B!=C&&B!=D&&B!=E&&C!=D&&C!=E&&D!=E&&A&&D)cout<<A<<B<<C<<D<<endl<<"* "<<E<<endl<<"----"<<endl<<D<<C<<B<<A<<endl;}}
也可以 首先运用全排列的思想编写dfs函数,接着编写check函数来判断是否满足条件和最高位不为0,最后定义output函数输出。
实现代码:
#include<iostream>using namespace std;void dfs(int ); //全排列函数void check(void); //判断函数void output(void); //输出函数int num[6]; //存储A、B、C、D、Eint number1,number2; //存储前后两个四位数的值bool flag[10]; //标记数字main(){dfs(1);}void dfs(int x){for(int i=0;i<10;i++)if(!flag[i]){num[x]=i; //赋值flag[i]=1; //标记该数字if(x==5) check(); //若已给A、B、C、D、E赋值,则判断else dfs(x+1); //下一轮搜索flag[i]=0; //回溯/*num[x]=0;*/ //可省略不写}}void check(){if(!num[1]||!num[4]||!num[5]) return ; //若最高位为0,不执行output()number1=num[1]*1000+num[2]*100+num[3]*10+num[4]; //赋值number2=num[4]*1000+num[3]*100+num[2]*10+num[1]; //赋值if(number1*num[5]==number2) output(); //判断}void output(){cout<<number1<<endl<<"* "<<num[5]<<endl<<"----"<<endl<<number2<<endl;}
总结:
像这样的题,我们可以利用全排列的思想来解决,这种思想可以解决许多题。
触类旁通:
编程爱我
+ 我爱编程
我们爱编程
阅读全文
1 0
- C++之小学奥数(1)
- 小学奥数之循环小数
- 小学奥数公式1
- C++之小学奥数(2)
- 小学奥数
- 小学奥数公式2
- 吐槽小学奥数
- 小学奥数(下)
- 小学奥数主要内容汇总!
- 小学奥数先锋 2006 bt
- 关于一道小学奥数题目
- Openjudge小学奥数--7834 分成互质组!
- 行测-数量-小学奥数知识体系
- 【小学奥数】【ExBsgs】垃圾计算机
- 2017小学奥数培训机构排名
- 小学奥数平均数经典问题汇总
- [来源未知][小学奥数]组合数取模
- 小学奥数10道经典题
- Python Code:图片和视频互相转换
- android面试 android知识点 基础篇
- java同步关键字解释
- mybatis缓存
- 337. House Robber III
- C++之小学奥数(1)
- 排序算法——归并排序(Merge Sort)
- Ubuntu 下JDK的安装与环境配置
- 11-S3C2440驱动学习(五)嵌入式linux-网络设备驱动(一)虚拟网卡驱动程序
- USANO-1.2.1 milk cows
- Linux-软件包管理简介
- Android中xml中的View标签小写的问题
- 克隆
- win10 python3.5.2下安装facenet