凑算式(枚举与深度优先搜索)

来源:互联网 发布:淘宝如何导出买家信息 编辑:程序博客网 时间:2024/04/29 15:06

凑算式

如图,这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。


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


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

思路一:

可以用枚举暴力算法

#include <stdio.h>  
int main()  
{  double a,b,c,d,e,f,g,h,i;
    int sum=0;  
    for( a=1; a<=9; a++)  
        for( b=1; b<=9; b++)  
        {  
            if(a==b) continue;  
            for( c=1; c<=9; c++)  
            {  
                if(c==a||c==b) continue;  
                for( d=1; d<=9; d++)  
                {  
                    if(d==a||d==b||d==c)continue;  
                    for( e=1; e<=9; e++)  
                    {  
                        if(e==a||e==b||e==c||e==d) continue;  
                        for( f=1; f<=9; f++)  
                        {  
                            if(f==a||f==b||f==c||f==d||f==e) continue;  
                            for( g=1; g<=9; g++)  
                            {  
                                if(g==a||g==b||g==c||g==d||g==e||g==f) continue;  
                                for( h=1; h<=9; h++)  
                                {  
                                    if(h==a||h==b||h==c||h==d||h==e||h==f||h==g) continue;  
                                    for( i=1; i<=9; i++)  
                                    {  
                                        if(i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h) continue;  
                                       if(a+b/c+(d*100+e*10+f)/(g*100+h*10+i)==10)
                                            sum++;  
                                    }  
                                }  
                            }  
                        }  
                    }  
                }  
            }  
        }  
  
    printf("%d",sum);  
    return 0;  

思路二:

深度优先搜索

#include<stdio.h>
double a[10];
int book[10],sum;
void fun(int step)
{
int i;
if(step==10)
{
if(a[1]+a[2]/a[3]+(a[4]*100+a[5]*10+a[6])/(a[7]*100+a[8]*10+a[9])==10)
{sum++;
}
return;
}
for(i=1;i<=9;i++)
{
if(book[i]==0)
{
a[step]=i;
book[i]=1;
fun(step+1);
book[i]=0;
   }
}
return;

 int main()
 {
  fun(1);
  printf("%d",sum);
 return 0;  
 }

0 0
原创粉丝点击