zoukankan      html  css  js  c++  java
  • 凑算式——第七届蓝桥杯C语言B组(省赛)第三题

    原创


    凑算式

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

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

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

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

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

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

    法一(枚举):

    开辟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);
        }
    }

    法二(全排列):

    全排列的思想请看我另外一篇博客:https://www.cnblogs.com/chiweiming/p/8727164.html

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

    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

  • 相关阅读:
    android ndk 调试问题
    音频
    文件分割与c语言文件结
    本机抓包
    rtm匹 转
    mac 工具等效率
    【MySQL】Explain Tutorial
    Sed基本入门[5] Sed Hold and Pattern Space Commands
    Sed基本入门[3] Regular Expressions
    Protocol Buffer Basics
  • 原文地址:https://www.cnblogs.com/chiweiming/p/9152722.html
Copyright © 2011-2022 走看看