蓝桥杯模拟赛2017 猜算式

来源:互联网 发布:cordova项目app源码 编辑:程序博客网 时间:2024/06/05 18:06
题目:猜算式

你一定还记得小学学习过的乘法计算过程,比如:

273
x 15
------
1365
273
------
4095

请你观察如下的乘法算式

***
x ***
--------
***
***
***
--------
*****

星号代表某位数字,注意这些星号中,
0~9中的每个数字都恰好用了2次。
(如因字体而产生对齐问题,请参看图p2.jpg)

请写出这个式子最终计算的结果,就是那个5位数是多少?

注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。



简单的模拟

#include<stdio.h>#include<string.h>#include<string>#include<iostream>#include<queue>#include<stack>#include<math.h>#include<string>#include<algorithm>#include<map>using namespace std;int mem[10];int a[3];int b[3];int r;void solve(int x){if(x == 3){int na,nb;na = a[0]*100+a[1]*10+a[2];nb = b[0]*100+b[1]*10+b[2];int book[10];memset(book,0,sizeof(book));for(int i=0;i<3;i++){int t = b[i]*na;if(t == 0){mem[t]++;book[t]++;}while(t){mem[t%10]++;book[t%10]++;t/=10;}}int t = na*nb;if(t == 0){mem[t]++;book[t]++;}while(t){mem[t%10]++;book[t%10]++;t/=10;}int s = 0;for(int i=0;i<10;i++){if(mem[i] != 2){s = 1;break;}}for(int i=0;i<10;i++){while(book[i]){mem[i]--;book[i]--;}}if(s == 0){r++;printf("%d %d %d     %d %d %d\n",a[0],a[1],a[2],b[0],b[1],b[2]);}}else{int t;if(x == 0)t = 1;else t = 0;for(int i=t;i<10;i++){if(mem[i] < 2){mem[i]++;a[x] = i;for(int j=t;j<10;j++){if(mem[j] < 2){mem[j]++;b[x] = j;solve(x+1);mem[j]--;}}mem[i]--;}}}}int main(){r = 0;memset(mem,0,sizeof(mem));solve(0);printf("r %d\n",r);return 0;}


0 0
原创粉丝点击