zoukankan      html  css  js  c++  java
  • 趣味算法 蓝桥杯

    趣味算式

    普通解法 

     
    import java.util.*;
    
    public class Main1 {
         public static void check(String str){
             String []s =str.split("[\+]|[-]");
             String sign =str.replaceAll("\d*", "");
             int sum=Integer.parseInt(s[0]);
             for(int i=0;i<s.length-1;i++){
                 switch (sign.charAt(i)) {
                case '+':
                    sum+=Integer.parseInt(s[i+1]);
                    break;
                case '-':
                    sum-=Integer.parseInt(s[i+1]);
                    break;
                 }
             }
             if(sum==110)
                 System.out.println(str);
         }
         public static void dfs(String s){
            char []c= s.toCharArray();
            StringBuffer sb = new StringBuffer();
            int len= s.length()-1;
            int []sign=new int [len];
             while(sign[0]<3){
                 sb.append(c[0]);
                 for(int i=0;i<len;i++){
                     if(sign[i]==1){
                         sb.append("+");
                     }else if(sign[i]==2)
                         sb.append("-");
                          sb.append(c[i+1]);
                 }
                 check(sb.toString());
                 sb.setLength(0);
                 sign[len-1]++;
                 for(int i=len-1;i>0;i--){
                     if(sign[i]==3){
                         sign[i]=0;
                         sign[i-1]++;
                         
                     }
                 }
             }
         }
        public static void main(String[] args)
        { 
            String s = "123456789";
            dfs(s);
             
             
        }
    
         
    }

    递归的精髓啊

      

    public class Demo15 {
        // 遍历所有情况
        public static void fun(String v, int n) { 
            if(n==9){    // 修改到最后一位符号时输出
                check(v);
            }else{    // 递归向后修改,数字 变为 数字加符号
                fun(v.replace(n+"", n+"+"),n+1);
                fun(v.replace(n+"", n+"-"),n+1);
                fun(v,n+1);
            }
        }
        // 验证 并 输出
        public static void check(String str){
            String[] s = str.split("[\+]");
            int sum = 0;    
            for(String t:s){
                String[] sub = t.split("[\-]");
                int num = Integer.parseInt(sub[0]);
                // 计算负数
                for(int i=1;i<sub.length;i++){    
                    num -= Integer.parseInt(sub[i]);
                }
                sum += num;    // 正数或负数结果 加到 总和上
            }
            if(sum == 110){
                System.out.println(str);
            }
        }
        public static void main(String[] args){
            String str = "123456789";
            fun(str,1);        // 调用函数,从1开始修改
        }
    }
  • 相关阅读:
    共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)
    区块链:共识算法POW
    区块链目前的几大共识算法
    StringUtils.isEmpty和StringUtils.isBlank用法
    StringUtils.isEmpty和StringUtils.isBlank用法
    hyper-v 无线网连接
    hyper-v 无线网连接
    hyper-v 无线网连接
    hyper-v 无线网连接
    nat和静态映射
  • 原文地址:https://www.cnblogs.com/ls-pankong/p/10524874.html
Copyright © 2011-2022 走看看