欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

凑算式——第七届蓝桥杯C语言B组(省赛)第三题

程序员文章站 2022-05-20 09:21:55
原创 凑算式 B DEFA + + = 10 C GHI (如果显示有问题,可以参见【图1.jpg】) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。 比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。 这个算式一共有多少种解法? 注意:你提交应 ......

原创


凑算式

       B      DEF
A + --- + ------- = 10
       C      GHI

(如果显示有问题,可以参见【图1.jpg】)

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

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

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

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

凑算式——第七届蓝桥杯C语言B组(省赛)第三题

法一(枚举):

开辟9个变量分别代表1~9个数,每个变量在1~9中变化,对于每一个数字都判断是否包含1~9个数码和满足凑算式即可。

public class 凑算式 {
    public static void main(String args[]) {
        double arr[]=new double[9];
        long total=0L;
        for(arr[0]=1;arr[0]<=9;arr[0]++) {
            for(arr[1]=1;arr[1]<=9;arr[1]++) {
                for(arr[2]=1;arr[2]<=9;arr[2]++) {
                    for(arr[3]=1;arr[3]<=9;arr[3]++) {
                        for(arr[4]=1;arr[4]<=9;arr[4]++) {
                            for(arr[5]=1;arr[5]<=9;arr[5]++) {
                                for(arr[6]=1;arr[6]<=9;arr[6]++) {
                                    for(arr[7]=1;arr[7]<=9;arr[7]++) {
                                        for(arr[8]=1;arr[8]<=9;arr[8]++) {
                                            int i=0;
                                            int tt=0;
                                            int flag[]=new int[10];
                                            for(i=0;i<=8;i++) {    //判断是否包含0~9
                                                if(flag[(int)(arr[i])]==1) {
                                                    break;
                                                }
                                                flag[(int)(arr[i])]=1;
                                                tt++;
                                            }
                                            if(tt==9) {
                                                if(arr[0]+arr[1]/arr[2]+(arr[3]*100+arr[4]*10+arr[5])/(arr[6]*100+arr[7]*10+arr[8])==10) {
                                                    total++;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        System.out.println(total);
    }
}

法二(全排列):

全排列的思想请看我另外一篇博客:

每产生一种全排列,就判断是否满足凑算式即可。

public class 凑算式{
    static int total=0;
    static int arr[]=new int[9];
    
    static void Swap(int a,int b) {    //交换
        int temp=0;
        temp=arr[a];
        arr[a]=arr[b];
        arr[b]=temp;
    }
    
    static void Full_Sort(int num) {    //全排列
        
        if(num==9) {    //产生一种全排列
            double a=arr[0];
            double b=arr[1];
            double c=arr[2];
            double def=arr[3]*100+arr[4]*10+arr[5];
            double ghi=arr[6]*100+arr[7]*10+arr[8];
            if(a+b/c+def/ghi==10) {
                total++;
            }
            return;
        }
        
        int i=0;
        for(i=num;i<=8;i++) {
            Swap(num,i);
            Full_Sort(num+1);
            Swap(num,i);
        }
    }
    
    public static void main(String args[]) {
        int i=0;
        for(i=0;i<=8;i++) {
            arr[i]=i+1;
        }
        Full_Sort(0);
        System.out.println(total);
    }
}

答案:29

21:10:02

2018-06-07