蓝桥杯 历届试题 神奇算式
2017-03-12 22:57
197 查看
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int k=0; int kk=0; void f(int *ia,int sum ,int q) { int a[4]={0}; int v[4]={0}; for(int i=0;i<4;i++) { a[i]=sum%10; sum/=10; } if(ia[0]!=ia[1]&&ia[1]!=ia[2]&&ia[2]!=ia[3]&&ia[0]!=ia[2]&&ia[0]!=ia[3]&&ia[1]!=ia[3]); else return; for(i=0;i<4;i++) { for(int j=0;j<4;j++) { if(a[i]==ia[j]) { v[j]++; if(v[j]>1) return ; } } } if((v[0]+v[1]+v[2]+v[3]) != 4) return ; else { if(q==0) {printf("%d*%d %d %d\n",ia[0],ia[1],ia[2],ia[3]); k++; } if(q==1) {printf("%d %d*%d %d\n",ia[0],ia[1],ia[2],ia[3]); kk++; } } } int main() { int ia[10]={0,1,2,3,4,5,6,7,8,9}; int ib[4]={0}; do { if(ib[0]!=ia[0]||ib[1]!=ia[1]||ib[2]!=ia[2]||ib[3]!=ia[3]) { ib[0]=ia[0]; ib[1]=ia[1]; ib[2]=ia[2]; ib[3]=ia[3]; if(ia[0]!=0&&ia[1]!=0&&(ib[0])*(ib[1]*100+ib[2]*10+ib[3])>=1000&&(ib[0])*(ib[1]*100+ib[2]*10+ib[3])<=9999) { f(ib,(ib[0])*(ib[1]*100+ib[2]*10+ib[3]),0); } if(ia[0]!=0&&ia[2]!=0) { if((ib[0]*10+ib[1])*(ib[2]*10+ib[3])>=1000&&(ib[0]*10+ib[1])*(ib[2]*10+ib[3])<=9999) f(ib,(ib[0]*10+ib[1])*(ib[2]*10+ib[3]),1); } } }while(next_permutation(ia,ia+10)); printf("%d\n",k+kk/2); return 0; }
相关文章推荐
- 历届试题 神奇算式 (全排列)
- 蓝桥杯 历届试题 马虎的算式
- 蓝桥杯 历届试题 古堡算式,微生物繁殖
- 蓝桥杯 历届试题 高斯日记 马虎的算式
- 蓝桥杯历届试题——地宫取宝 (记忆化dp)
- 蓝桥杯 历届试题 兰顿蚂蚁 (模拟)
- 蓝桥杯-- 历届试题 剪格子(dfs)
- 蓝桥杯 历届试题 小朋友排队
- 蓝桥杯 历届试题 小朋友排队
- 蓝桥杯 历届试题 大臣的旅费 (两次dfs 之树上求最长路径)
- 蓝桥杯 历届试题 错误票据
- (蓝桥杯) 历届试题 错误票据
- 蓝桥杯 历届试题 兰顿蚂蚁
- 蓝桥杯历届试题 错误票据
- 蓝桥杯 历届试题 分糖果
- 【蓝桥杯】历届试题 核桃的数量
- 【蓝桥杯】历届试题 蚂蚁感冒
- 【蓝桥杯】历届试题 幸运数
- 蓝桥杯 历届试题 蚂蚁感冒
- 蓝桥杯 历届试题 剪格子