今日算法题

题目一:字母图形

问题描述:

利用字母可以组成一些美丽的图形,下面给出了一个例子:(时间限制: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");
    }
}

posted @ 2020-03-10 20:03  samsaraaa  阅读(142)  评论(0编辑  收藏  举报