Java程序之基本编程练习

发布于:2024-07-04 ⋅ 阅读:(17) ⋅ 点赞:(0)

1、兔子繁殖问题

题目:已知有一对兔子,每个月可以生一对兔子,而小兔子一个月后又可以生一对小兔子(比如:2月份出生的小兔子4月份可以生育)。也就是说,兔子的对数为:第一个月1对,第二个月2对,第三个月3对,第四个月5对.....假设兔子的生育期为两年,且不死。那么问题来了,你能说出每个月的兔子数么?

输入格式:

输入一个数n,表示第n个月,1<=n<=24。

输出格式:

输出这个月兔子的数目。

输入样例:

4

输出样例:

5

代码长度限制        16 KB

时间限制                400 ms

内存限制                64 MB

源代码:

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int months = scanner.nextInt();
        int[] rabbitCounts = new int[months];
        rabbitCounts[0] = 1; // 第一个月1对兔子
        rabbitCounts[1] = 2; // 第二个月2对兔子
        for (int i = 2; i < months; i++) {
            rabbitCounts[i] = rabbitCounts[i - 1] + rabbitCounts[i - 2];
        }
            System.out.println(rabbitCounts[months-1]);

    }
}

2、判断闰年

题目:根据输入的正整数y所代表的年份,计算输出该年份是否为闰年
闰年的判断标准:

        能够被4整除且不能被100整除的年份或者能够被400整除的年份

输入格式:

输入n取值范围是 【1..3000】

输出格式:

是闰年,输出 yes

非闰年,输出 no

输入样例:

在这里给出一组输入。例如:

100

输出样例:

在这里给出相应的输出。例如:

no

代码长度限制        16 KB

时间限制                400 ms

内存限制                64 MB

源代码:

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int year = scanner.nextInt();
        if((year%4==0&&year%100!=0)||(year%400==0))
        {
            System.out.print("yes");
        }
        else
        {
            System.out.print("no");
        }

    }
}

3、空心字母金字塔

一个大写英文字母。

输出格式:

一个空心的大写英文字母金字塔,其中第1层的“A”在第1行的第40列,列从1开始计数。

输入样例:

E

输出样例:

                                       A
                                      B B
                                     C   C
                                    D     D
                                   EEEEEEEEE

代码长度限制        16 KB

时间限制                400 ms

内存限制                64 MB

源代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        char letter = scanner.next().charAt(0);
        int height = letter - 'A' + 1;

        for (int i = 1; i <= height; i++) {
            for (int j = 1; j <= 40 - i; j++) {
                System.out.print(" ");
            }
            System.out.print((char) ('A' + i - 1));
            if (i > 1&&i<height) {
                for (int j = 1; j < 2*i-2 ; j++) {
                    System.out.print(" ");
                }
                System.out.print((char) ('A' + i - 1));
            }

            if(i!=height) {
                System.out.println();
            }
            if(i==height) {
                for (int j = 0; j < 2*i-2; j++)
                    System.out.print(letter);
                break;
            }
        }

    }
}

 4、特殊回文数

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

输入格式:

输入一行,包含一个正整数n。数据规模和约定1<=n<=54。

输出格式:

按从小到大的顺序输出满足条件的整数,每个整数占一行。

输入样例:

在这里给出一组输入。例如:

52

输出样例:

在这里给出相应的输出。例如:

899998
989989
998899

代码长度限制        16 KB

时间限制                400 ms

内存限制                64 MB

源代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
       int num=sc.nextInt();
       for(int i=10000;i<100000;i++)
       {
           int a=i/10000;
           int b=i/1000%10;
           int c=i/100%10;
           int d=i/10%10;
           int e=i%10;
           if(a+b+c+d+e==num&&(a==e&&b==d))
           {
               System.out.println(i);
           }
       }
        for(int i=100000;i<1000000;i++)
        {
            int a=i/100000;
            int b=i/10000%10;
            int c=i/1000%10;
            int d=i/100%10;
            int e=i/10%10;
            int f=i%10;
            if(a+b+c+d+e+f==num&&(a==f&&b==e&&c==d))
            {
                System.out.println(i);
            }
        }


        }
    }

5、根据和找到最大乘积 

试求和为N,积为最大的两个整数数分别是多少。

从键盘中输入一个整数,它是另外两个整数(不同时为0)的加法运算和,这样的两个整数的组合有很多种,请找出乘积最大的一组数据。

请注意输出两个整数以空格分割,按由小到大的顺序输出。

输入格式:

从键盘中输入一个整数

输出格式:

在一行中输出两个整数(不同时为0),以空格分割,按由小到大的顺序输出。

输入样例:

33

输出样例:

16 17

输入样例:

-51

输出样例:

-26 -25

代码长度限制        16 KB

时间限制                1000 ms

内存限制                64 MB

源代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();

        int num1 = 0, num2 = 0;

        if(N>0)
        {
            num1=N/2;
            if(N%2==0) {
                num2 = N / 2 ;
            }
            else {
                num2 = N / 2+1;
            }
        }
        else
        {
            if(N%2==0) {
                num1 = N / 2 ;
            }
            else {
                num1 = N / 2-1;
            }
            num2=N/2;
        }
        if(num1==0&num2==0)
        {
            num1=-1;
            num2=1;
            System.out.println(num1+" "+num2);
        }else{
            System.out.println(num1+" "+num2);
        }
    }
}