• 今日算法题


    题目一:字母图形

    问题描述:

    利用字母可以组成一些美丽的图形,下面给出了一个例子:(时间限制:1.0s,内存限制:256.0MB,1 <= n, m <= 26)

    ABCDEFG

    BABCDEF

    CBABCDE

    DCBABCD

    EDCBABC

    这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

    输入、输出格式:

    输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。

    输出n行,每个m个字符,为你的图形。

    解决思路:

    1.先找出图形的规律:可以把这看成是由两节字符串拼凑而成的

    "" + "ABCDEFG"

    "B" + "ABCDEF"

    "CB" + "ABCDE"

    "DCB" + "ABCD"

    "EDCB" + "ABC"

    2.这两节字符串就可以分别从英文字母表的正序和倒序截取。

    解决代码:

    
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();    // 列数:即是字符数
            int m = sc.nextInt();    // 行数
            String s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            String s2 = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
    
            for(int i = 0; i < n; i++) {
                if(m > i)
                    System.out.println(s2.substring(s2.length()-1-i, 25) + s1.substring(0, m-i));
                else
                    System.out.println(s2.substring(s2.length()-1-i, 25).substring(0,m));
            }
        }
    }
    
    

    题目二:01字串

    问题描述:

    对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:(时间限制:1.0s,内存限制:256.0MB)

    00000

    00001

    00010

    00011

    00100

    请按从小到大的顺序输出这32种01串。

    输入、输出格式:

    无输入

    输出32行,按从小到大的顺序每行一个长度为5的01串。

    解决思路:

    1.首先忽略掉输出结果前的0,不难看出这就是0-31的二进制表示形式。

    2.接下来需要解决如何添加输出结果前的0的问题,经过分析可知,最多在结果前添加4个0,而最少就是不添加,于是可以不管输出结果全部统一加上4个0,最后再用字符串截取最后5位即可。

    解决代码:

    
    public class Main {
        public static void main(String[] args) {
            for(int i = 0; i < 32; i++) {
                String s = "0000" +Integer.toBinaryString(i);
                System.out.println(s.substring(s.length() - 5, s.length()));
            }
        }
    }
    
    

    题目三:数列特征

    问题描述:

    给出n个数,找出这n个数的最大值,最小值,和。(时间限制:1.0s,内存限制:256.0MB,1 <= n <= 10000)

    输入、输出格式:

    第一行为整数n,表示数的个数。第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。

    输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。

    解决思路:

    求一组数的最大最小值排序即可。

    解决代码:

    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
    
            int[] arr = new int[n];
            int sum = 0;
            for(int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
                sum += arr[i];
            }
    
            Arrays.sort(arr);
    
            System.out.println(arr[n-1]);
            System.out.println(arr[0]);
            System.out.println(sum);
        }
    }
    
    

    题目四:闰年判断

    问题描述:

    给定一个年份,判断这一年是不是闰年。(时间限制:1.0s,内存限制:256.0MB,1990 <= y <= 2050)

    当以下情况之一满足时,这一年是闰年:

    1. 年份是4的倍数而不是100的倍数;

    2. 年份是400的倍数。

    其他的年份都不是闰年。

    输入、输出格式:

    输入包含一个整数y,表示当前的年份。

    输出一行,如果给定的年份是闰年,则输出yes,否则输出no。

    解决代码:

    
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int year = sc.nextInt();
    
            if(year % 4 == 0 && year % 100 != 0) {
                System.out.println("yes");
            }
            else if(year % 400 == 0) {
                System.out.println("yes");
            }
            else
                System.out.println("no");
        }
    }
    
    
  • 相关阅读:
    LeetCode: Copy List with Random Pointer
    LeetCode: Clone Graph
    LeetCode: Candy
    Database: Normal form
    Algorithm: cartesian tree
    【阿里云产品公测】云引擎ACE初体验
    【阿里云产品公测】Opensearch使用体验和评测
    【阿里云产品公测】阿里云OpenSearch初次使用评测
    【阿里云产品公测】OpenSearch初探
    【阿里云产品公测】弹性伸缩服务ESS之试用初体验
  • 原文地址:https://www.cnblogs.com/syhyfh/p/12458215.html
Copyright © 2020-2023  润新知