第七届蓝桥杯第三题

来源:互联网 发布:mac版本ug 编辑:程序博客网 时间:2024/06/07 10:15
凑算式
     B      DEF
A + --- + ------- = 10
     C      GHI
     
(如果显示有问题,可以参见【图1.jpg】)
    
    
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。


1.回溯

#include <stdio.h>#include <stdlib.h>#include <math.h>int a[10],vis[10];//= {0,5,3,1,9,7,2,4,8,6}int cnt = 0;void judge(){    double x,y,z;    x = a[1];    y = (double)a[2]/a[3];z =    (double)((a[4])*100+a[5]*10+a[6])/(a[7]*100+a[8]*10+a[9]);//判断我被自己傻哭了。    if(fabs(x+y+z-10.0) <= 1e-10)    cnt++; }void dfs(int n){    if(n == 10)    {        judge();//        return ;    }    for(int i = 1; i<10; i++)    {        if(!vis[i])        {            vis[i] = 1;            a[n] = i;            dfs(n+1);            vis[i] = 0;        }    }}int main(){    dfs(1);    printf("%d\n",cnt);    return 0;    }

2.STL全排列

#include <stdio.h>#include <iostream>#include <algorithm>#include <math.h>using namespace std;int main(){int a[10];int sum[4];int cnt = 0;for(int i = 1; i<=9; i++){a[i] = i;}do{double x,y,z;x = a[1];y = (double)a[2]/a[3];z = (double)((a[4])*100+a[5]*10+a[6])/(a[7]*100+a[8]*10+a[9]);//判断我被自己傻哭了。 if(fabs(x+y+z-10.0) <= 1e-10)cnt++;}while(next_permutation(a+1,a+10));cout<<cnt<<endl;return 0; } 


0 0
原创粉丝点击