zoukankan      html  css  js  c++  java
  • 算法笔记_121:蓝桥杯第六届省赛(Java语言C组部分习题)试题解答

     目录

    1 隔行变色

    2 立方尾不变

    3 无穷分数

    4 格子中输出

    5 奇妙的数字

    6 打印大X

     

      前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~


    1 隔行变色

    隔行变色
    
    Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。
    小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,....
    现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。
    
    请你直接提交这个整数,千万不要填写任何多余的内容。
    
    15
    public class Main {
        
        public static void main(String[] args) {
            int count = 0;
            for(int i = 21;i <= 50;i++) {
                if(i % 2 == 1)
                    count++;
            }
            System.out.println(count);
        }
    }

    2 立方尾不变

    立方尾不变
    
    有些数字的立方的末尾正好是该数字本身。
    比如:1,4,5,6,9,24,25,....
    
    请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。
    
    请提交该整数,不要填写任何多余的内容。
    
    36
    public class Main {
        
        public static void main(String[] args) {
            int count = 0;
            for(long i = 1;i <= 10000;i++) {
                long temp = i * i * i;
                String A = temp + "";
                String B = i + "";
                int len = B.length();
                int judge = Integer.valueOf(A.substring(A.length() - len, A.length()));
                if(i == judge) {
                    System.out.println("i = "+i+", A = "+A);
                    count++;
                }
            }
            System.out.println(count);
        }
    }

    3 无穷分数

    无穷分数
    
    无穷的分数,有时会趋向于固定的数字。
    请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。
    
    请填写该浮点数,不能填写任何多余的内容。
    0.58198
    public class Main {
        
        public static void main(String[] args) {
            
            double temp = 10000000 * 1.0 / 1000001;
            double result = 0;
            for(int i = 10000000;i >= 1;i--) {
                result = i - 1 + temp;
                temp = (i - 1) / result;
            }
            System.out.printf("%.5f",result);
        }
    }

    4 格子中输出

    格子中输出
    
    stringInGrid方法会在一个指定大小的格子中打印指定的字符串。
    要求字符串在水平、垂直两个方向上都居中。
    如果字符串太长,就截断。
    如果不能恰好居中,可以稍稍偏左或者偏上一点。
    
    下面的程序实现这个逻辑,请填写划线部分缺少的代码。
    
        public static void stringInGrid(int width, int height, String s)
        {
            if(s.length()>width-2) s = s.substring(0,width-2);
            System.out.print("+");
            for(int i=0;i<width-2;i++) System.out.print("-");
            System.out.println("+");
            
            for(int k=1; k<(height-1)/2;k++){
                System.out.print("|");
                for(int i=0;i<width-2;i++) System.out.print(" ");
                System.out.println("|");
            }
            
            System.out.print("|");
            
            String ff = _______________________________________________________;  //填空
            System.out.print(String.format(ff,"",s,""));
                      
            System.out.println("|");
            
            for(int k=(height-1)/2+1; k<height-1; k++){
                System.out.print("|");
                for(int i=0;i<width-2;i++) System.out.print(" ");
                System.out.println("|");
            }    
            
            System.out.print("+");
            for(int i=0;i<width-2;i++) System.out.print("-");
            System.out.println("+");    
        }
    
    对于题目中数据,应该输出:
    +------------------+
    |                  |
    |     abcd1234     |
    |                  |
    |                  |
    +------------------+
    
    (如果出现对齐问题,参看【图1.jpg】)
    
    //注意:ff中有三个%s分别对应第一段空格字符,第二段函数给定变量s字符串字符,第三段空格字符
    //其中%s表示打印一个字符串变量,%is表示打印出长度为i的空格字符串
    //System.out.print(String.format(ff,"",s,""));该语句后面"",s,""分别表示变量1,2,3。即对应第一段字符串,第二段字符串,第三段字符串。而ff则为输出格式。
    
    "%"+((width-2-s.length())/2)+"s%s%"+((width-1-s.length())/2)+"s"

    5 奇妙的数字

    奇妙的数字
    
    小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。
    你能猜出这个数字是多少吗?
    
    请填写该数字,不要填写任何多余的内容。
    
    69
    import java.util.Arrays;
    
    public class Main {
        
        public static void main(String[] args) {
            for(long i = 10;i < 200;i++) {
                long temp1 = i * i;
                long temp2 = i * i * i;
                String A = temp1 + "";
                String B = temp2 + "";
                int len = A.length() + B.length();
                if(len == 10) {
                    long[] array = new long[10];
                    int j = 0;
                    while(temp1 > 0) {
                        array[j++] = temp1 % 10;
                        temp1 = temp1 / 10;
                    }
                    while(temp2 > 0) {
                        array[j++] = temp2 % 10;
                        temp2 = temp2 / 10;
                    }
                    Arrays.sort(array);
                    for(j = 0;j < 10;j++) {
                        if(array[j] == j)
                            continue;
                        else
                            break;
                    }
                    if(j == 10)
                        System.out.println("i = "+i+", i^2 = "+(i*i)+", i^3 = "+(i*i*i));
                }
            }
        }
    }

    6 打印大X

    打印大X
    
    小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
    为了便于比对空格,所有的空白位置都以句点符来代替。
    
    要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
    要求输出一个大X
    
    例如,用户输入:
    3 9
    程序应该输出:
    ***.....***
    .***...***.
    ..***.***..
    ...*****...
    ....***....
    ...*****...
    ..***.***..
    .***...***.
    ***.....***
    
    (如有对齐问题,参看【图1.jpg】)
    
    再例如,用户输入:
    4 21
    程序应该输出
    ****................****
    .****..............****.
    ..****............****..
    ...****..........****...
    ....****........****....
    .....****......****.....
    ......****....****......
    .......****..****.......
    ........********........
    .........******.........
    ..........****..........
    .........******.........
    ........********........
    .......****..****.......
    ......****....****......
    .....****......****.....
    ....****........****....
    ...****..........****...
    ..****............****..
    .****..............****.
    ****................****
    
    (如有对齐问题,参看【图2.jpg】)
    
    
    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗  < 1000ms
    
    
    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
    
    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
    注意:主类的名字必须是:Main,否则按无效代码处理。
    import java.util.Scanner;
    
    public class Main {
        
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int m = in.nextInt();
            int n = in.nextInt();
            char[][] A = new char[n][n + m - 1];
            for(int i = 0;i < n;i++)
                for(int j = 0;j < n + m - 1;j++)
                    A[i][j] = '.';
            int mid = n / 2;
            for(int i = 0;i <= mid;i++) {
                int startL = i, endL = i + m - 1;      //X左边星号开始于截止纵坐标
                int startR = n  - 1 - i, endR = n + m - 2 - i; //X右边星号起止纵坐标
                for(int j = startL;j <= endL;j++) {
                    A[i][j] = '*';
                    A[n - 1 - i][j] = '*';
                }
                for(int j = startR;j <= endR;j++) {
                    A[i][j] = '*';
                    A[n - 1 - i][j] = '*';
                }
            }
            //打印题意结果
            for(int i = 0;i < n;i++) {
                for(int j = 0;j < n + m - 1;j++)
                    System.out.print(A[i][j]);
                System.out.println();
            }
        }
    }
  • 相关阅读:
    Metasploit命令大全
    nmap所有参数详解
    Kali Linux 命令集
    十大编程算法助程序员走上大神之路
    新入行程序员需要知道的十个秘密
    浅谈c#枚举
    php 常用的系统函数
    php大型网站如何提高性能和并发访问
    【转】Oracle + PHP Cookbook(php oracle clob 长度超过4000如何写入)
    干货:小程序开发文档和设计指南要点详解
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/6648678.html
Copyright © 2011-2022 走看看