zoukankan      html  css  js  c++  java
  • 算法笔记_207:第五届蓝桥杯软件类决赛部分真题(Java语言C组)

    目录

    1 数字拆分

    2 稍大的串

     

      前言:以下代码仅供参考,若有错误欢迎指正哦~


    1 数字拆分

     正整数可以表示为若干正整数的累加和。
    
      如,对于正整数n=6,可以分划为: 
    6
    5+1
    4+2
    4+1+1
    3+3
    3+2+1
    3+1+1+1
    2+2+2
    2+2+1+1
    2+1+1+1+1
    1+1+1+1+1+1
    
      现在的问题是,对于给定的正整数n,计算出所有划分情况。
      下面的代码实现了这个功能。仔细分析,填写划线部分缺失的代码。
    
    public class MyTest
    {    public static List fen(int n, int limit)
        {
            Vector v = new Vector();
            if(n<=limit) v.add(n);
            
            for(int i=1; i<n; i++)
            {
                if(n-i > limit) continue;
    
                List t = fen(i,n-i);
                
                for(int k=0; k<t.size(); k++)
                    __________________________;  //填空位置
            }
            
            return v;
        }
        
        public static void main(String[] args)
        {        
            List v = fen(6,6);        
            for(int i=0; i<v.size(); i++)
                System.out.println(v.get(i));
        }
    }
    
    
    
    注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字或已有符号)。

    答案: v.add((n-i)+"+"+t.get(k))


    2 稍大的串

    串可以按照字典序进行比较。例如:
      abcd 小于 abdc
    
      如果给定一个串,打乱组成它的字母,重新排列,可以得到许多不同的串,在这些不同的串中,有一个串刚好给定的串稍微大一些。科学地说:它是大于已知串的所有串中最小的串。你的任务就是求出这个“稍大的串”。
    
    例如:
    输入串:
    abfxy
    程序应该输出:
    abfyx
    
    再例如:
    输入串:
    ayyyxxff
    程序应该输出:
    fafxxyyy
    
    fyyyxxaa
    数据规模约定:
      输入的串不超过1000个字符。
    
    特例:
      如果已知的串已经是所有重组串中最大的,则原样输出读入的那个串。
    
    
    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗  < 1000ms
    
    
    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
    
    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
    注意:主类的名字必须是:Main,否则按无效代码处理。
     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class Main {
     5     
     6     public void getResult(String A) {
     7         int len = A.length();
     8         int i = len - 1;
     9         for(;i >= 1;i--)
    10             if(A.charAt(i - 1) < A.charAt(i))
    11                 break;
    12         if(i == 0) {
    13             System.out.println(A);
    14             return;
    15         }
    16         char temp = A.charAt(i - 1);
    17         char[] arrayB = A.substring(i).toCharArray();
    18         Arrays.sort(arrayB);
    19         for(int j = 0;j < arrayB.length;j++)
    20             if(arrayB[j] > temp) {
    21                 char a = arrayB[j];
    22                 arrayB[j] = temp;
    23                 temp = a;
    24                 break;
    25             }
    26         StringBuilder result = new StringBuilder(A.subSequence(0, i - 1));
    27         result.append(temp);
    28         for(int j = 0;j < arrayB.length;j++)
    29             result.append(arrayB[j]);
    30         System.out.println(result);
    31     }
    32     
    33     public static void main(String[] args) {
    34         Main test = new Main();
    35         Scanner in = new Scanner(System.in);
    36         String A = in.next();
    37         test.getResult(A);
    38     }
    39 }
  • 相关阅读:
    规约先行-(六)并发处理
    MySQL选择合适的方式存储时间
    规约先行-(五)集合处理
    规约先行-(四)OOP 规约
    12.20-LaTex git workflow
    6.25-ROS 软件度量
    6.19-rosdoc_lite and 文档构建工具
    12.27-ros-decision making
    12.3-分级并发有限状态机-SMACH
    12.07-rostest学习
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/6862271.html
Copyright © 2011-2022 走看看