• 从1-9中选9个数字全部选到且不能重复选取


    之前做蓝桥杯的题目的时候,遇到一次这种题目,在1到9中选9个数字且不能重复,一直百度也没有找到合适的方法。今天在这里为大家编写算法(其实和冒泡排序算法差不多,大家如果还有好的算法可以留言哦),题目是这种题目,其实后面函数就是化为怎么判断不重复的问题。

    1.问题描述:
        凑算式

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


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

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

      这道题目刚开始看到,我是想到用for循环暴力,一想要写9个for循环,立马想放弃了。但其实不用这样,只用写5个for循环,将DEF和GHI看成一个整体,设置变量a1,a2,a3,a4,a5,然后再for循环。循环完了,再调用函数isReaped(a1,a2,a3,a4,a5),判断是否重复,不重复输出即可。

    3.代码如下:

    public class Pchou{
        public static void main(String[] args) {
            int a1,a2,a3,a4,a5;//5个数
            int count = 0;
            for(a1=1;a1<10;a1++){
                for(a2=1;a2<10;a2++){
                    for(a3=1;a3<10;a3++){
                        for(a4=100;a4<988;a4++){
                            for(a5=100;a5<988;a5++){
                                if((double)(a1*a5*a3)/(a3*a5) + (double)(a2*a5)/(a5*a3) + (double)(a4*a3)/(a5*a3) == 10 && isRepeaded(a1,a2,a3,a4,a5)){
                                    System.out.printf("%d+%d/%d+%d/%d
    ",a1,a2,a3,a4,a5);
                                    count++;
                                }
                            }
                        }
                    }
                }
            }
            System.out.println("总数为:" + count);
        }
        
        //判断数是否重复
        public static boolean isRepeaded(int a1, int a2, int a3, int a4, int a5) {
        
            char[] charArray1 = String.valueOf(a4).toCharArray();
            char[] charArray2 = String.valueOf(a5).toCharArray();
            int b[] = new int[3];
            int c[] = new int[3];
            
            for(int i=0;i<3;i++){
                b[i] = charArray1[i] - '0';
                c[i] = charArray2[i] - '0';
            }
            //将这些数全部保存在temp中
            int temp[] = {a1,a2,a3,b[0],b[1],b[2],c[0],c[1],c[2]};
            //现在把所有的数都分离出来了,只要这几个数不重复即可,关键在于怎么判断这些数在0-9且不重复
            int flag = 0;
            for(int i=0;i<8;i++){
                for(int j=i+1;j<9;j++){
                    if(temp[j] == temp[i]){
                        flag = 1;
                    }
                }
            }
            if(flag ==0){
                return true;
            }else{
                return false;
            }
        }
    }
    

      



  • 相关阅读:
    linux下php环境的装配以及php storm的链接
    p4 : a problem about "./behavioral-model"
    p4factory下 targets/basic_rout
    P4安装
    第二次结对编程作业——毕业导师智能匹配
    初识GIT
    结对项目之需求分析与原型设计
    调研《构建之法》指导下的全国高校的历届软工实践作品、全国互联网+竞赛、物联网竞赛等各类全国性大学生信息化相关的竞赛平台的历届作品及其看法
    SDN 收集一下最近的资料
    软件工程的实践项目课程的自我目标
  • 原文地址:https://www.cnblogs.com/zzlback/p/8462140.html
Copyright © 2020-2023  润新知