时间转换-矩形面积交

蓝桥练习BASIC-14—BASIC-18(时间转换-矩形面积交)
BASIC14:时间转换

问题描述

给定一个以秒为单位的时间t,要求用“::”的格式来表示这个时间。表示时间,表示分钟,而表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。

输入格式

输入只有一行,是一个整数t(0<=t<=86399)。

输出格式

输出只有一行,是以“::”的格式所表示的时间,不包括引号。

样例输入

0

样例输出

0:0:0

样例输入

5436

样例输出

1:30:36

思路:对于如上问题,观察可以得到。一小时为3600秒,一分钟为60秒。所以我们可以用输入的T来表示H:M:S.

即如下代码:

import java.util.Scanner;

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

        int H = t / 3600;
        int M = (t % 3600) / 60;
        int S = ((t % 3600) % 60);

        System.out.println(H + ":" + M + ":" + S);
    }

}
BASIC15:字符串对比

问题描述

给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
  1:两个字符串长度不等。比如 Beijing 和 Hebei
  2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
  3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
  4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
  编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。

输入格式

包括两行,每行都是一个字符串

输出格式

仅有一个数字,表明这两个字符串的关系编号

样例输入

BEIjing

beiJing 

样例输出

3

思路:判断每个字符的位置是否相等,大小写的情况等等。判断完输出1对应的1234.

tip: 1.java 的Math类方法可以帮助解题

2.equals()判断number对象是否与参数相等。

3.equalsIgnoreCase() 方法用于将字符串与指定的对象比较,不考虑大小写。

public class Compare
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        String s1 = in.nextLine();
        String s2 = in.nextLine();
        if (s1.length() != s2.length())
        {
            System.out.println(1);
        } else if (s1.equals(s2))
        {
            System.out.println(2);
        } else if (s1.equalsIgnoreCase(s2))
        {
            System.out.println(3);
        } else
        {
            System.out.println(4);
        }
    }
}
BASIC16:分解质因数

资源限制

时间限制:1.0s 内存限制:512.0MB

问题描述

求出区间[a,b]中所有整数的质因数分解。

输入格式

输入两个整数a,b。

输出格式

每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)

样例输入

3 10

样例输出

3=3
4=22
5=5
6=2
3
7=7
8=222
9=33
10=2
5

提示

先筛出所有素数,然后再分解。

数据规模和约定

2<=a<=b<=10000

思路:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

import java.util.Scanner;

public class Third{
    public static void main(String[] args) {
        //输入区间[a,b].
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();
        in.close();
        for(int i = a;i <= b;i++)
        {
            Decompose(i);
        }

    }
    //定义一个分解方法
    private static void Decompose(int n)
    {
        //n=
        System.out.print(n+"=");

        for(int i=2;i<=n;i++)
        {
            while(n % i == 0 && n!=i )
            {
                n/=i;
                System.out.print(i+"*");
            }
            if(n==i)
            {
                System.out.print(i);
                System.out.println();
                break;
            }
        }

    }
}
BASIC17:矩阵乘法

问题描述

给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
  例如:
  A =
  1 2
  3 4
  A的2次幂
  7 10
  15 22

输入格式

第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
  接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值

输出格式

输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开

样例输入

2 2
1 2
3 4

样例输出

7 10
15 22

思路:矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 [1] 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑地集中到了一起,所以有时候可以简便地表示一些复杂的模型,如电力系统网络模型

import java.util.Scanner;

public class Fourth
{

    public static void main(String[] args)
    {

        Scanner in = new Scanner(System.in);

        int n = in.nextInt();

        int m = in.nextInt();

        long[][] a = new long[n][n];

        long[][] b = new long[n][n];

        for (int i = 0; i < n; i++)
        {

            for (int j = 0; j < n; j++)
            {

                a[i][j] = b[i][j] = in.nextLong();

            }

        }

        if (m == 0)
        {

            for (int i = 0; i < n; i++)
            {

                for (int j = 0; j < n; j++)
                {

                    if (i == j)
                    {

                        System.out.print(1 + " ");

                    } else
                    {

                        System.out.print(0 + " ");

                    }

                }

                System.out.println();

            }

        } else if (m == 1)
        {

            for (int i = 0; i < n; i++)
            {

                for (int j = 0; j < n; j++)
                {

                    System.out.print(a[i][j]);

                }

                System.out.println();

            }

        } else
        {

            for (int z = 1; z < m; z++)
            {

                long[][] tmp = new long[n][n];

                for (int i = 0; i < n; i++)
                {

                    for (int j = 0; j < n; j++)
                    {

                        long add = 0;

                        for (int y = 0; y < n; y++)
                        {

                            add += a[i][y] * b[y][j];

                        }

                        tmp[i][j] = add;


                    }

                }

                b = tmp;

            }

            for (int i = 0; i < n; i++)
            {

                for (int j = 0; j < n; j++)
                {

                    System.out.print(b[i][j] + " ");

                }

                System.out.println();

            }
        }
        in.close();

    }
}
BASIC18:矩形面积交

问题描述

平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入格式

输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出格式

输出仅包含一个实数,为交的面积,保留到小数后两位。

样例输入

1 1 3 3
2 2 4 4

样例输出

1.00

思路:abs() 返回参数的绝对值。参数可以是 int, float, long, double, short, byte类型。

Math类的使用

import java.util.Scanner;

public class Fifth
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);

        //矩形一
        double x1 = in.nextDouble();
        double y1 = in.nextDouble();
        double x2 = in.nextDouble();
        double y2 = in.nextDouble();
        //矩形二
        double x3 = in.nextDouble();
        double y3 = in.nextDouble();
        double x4 = in.nextDouble();
        double y4 = in.nextDouble();

        //找到 矩形一二的最大最小 x,y

        //矩形一 x
        double OnexMax = Math.max(x1, x2);
        double OnexMin = Math.min(x1, x2);
        //矩形一y
        double OneyMax = Math.max(y1, y2);
        double OneyMin = Math.min(y1, y2);

        //矩形二x
        double TwoxMax = Math.max(x3, x4);
        double TwoxMin = Math.min(x3, x4);
        //矩形二y
        double TwoyMax = Math.max(y3, y4);
        double TwoyMin = Math.min(y3, y4);

        //判断两矩形不相交的情况
        if (OnexMax <= TwoxMin || OnexMin >= TwoxMax || OneyMax <= TwoyMin || OneyMin >= TwoyMax)
        {
            System.out.println("0.00");
        } else
        {
            //找交点坐标
            double x = Math.max(OnexMin, TwoxMin);
            double y = Math.min(OneyMax, TwoyMax);

            double xx = Math.min(OnexMax, TwoxMax);
            double yy = Math.max(OneyMin, TwoyMin);

            System.out.printf("%.2f", Math.abs(yy - y) * Math.abs(xx - x));
        }

    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值