练习Day——1

时间转换

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

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

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

样例输入
5436

样例输出
1:30:36

import java.util.Scanner;

//时间转换

public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		int t=scan.nextInt();
		int H,M,S;
		H=t/3600;
		M=(t%3600)/60;
		S=(t%3600)%60;
		System.out.print(H+":"+M+":"+S);
	}

}

字符串对比

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

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

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

样例输入
BEIjing
beiJing

样例输出
3

import java.util.Scanner;

public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		String str1=scan.next();
		String str2=scan.next();
		int len1=str1.length();
		int len2=str2.length();
		if(len1==len2) {
			if(str1.equals(str2)) {
				System.out.print("2");
			}
			else if(str1.equalsIgnoreCase(str2)) {
				System.out.print("3");
			}
			else
				System.out.print("4");
		}
		else
			System.out.print("1");
	}

}

矩阵乘法

题目描述
给定一个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

import java.util.Scanner;

//矩阵乘法

public class Main {
	public static void main(String []args) {
		Scanner scan=new Scanner(System.in);
		int n,m;
		n=scan.nextInt();//n阶矩阵
		m=scan.nextInt();//m次幂
		
		int num[][]=new int[n][n];
		
		//输入矩阵元素
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++) {
				num[i][j]=scan.nextInt();
			}
		}
		
		if(m==0) {//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) {//1次幂的结果就是矩阵本身
			for(int i=0;i<n;i++) {
				for(int j=0;j<n;j++) {
					System.out.print(num[i][j]+" ");
				}
				System.out.println();
			}
		}
		else {
			int s[][]=new int [n][n];
			//用来保留最初的原数组
			s=num;
			
		    for(int i=1;i<m;i++) {
		        int result[][]=new int[n][n];//用来保存每次计算的结果
		        
		        for(int j=0;j<n;j++) {
		            for(int k=0;k<n;k++) {
		                int tmp=0;
		                for(int x=0;x<n;x++) {
		                    tmp+=num[j][x]*s[x][k];
		                }
		                result[j][k]=tmp;
		            }
		        }
		        //每次计算的结果都赋值给原数组num
		        num=result;
		    }
		    
		    //最后输出计算后的结果
		    for(int i=0;i<n;i++) {
		        for(int j=0;j<n;j++) {
		            System.out.print(num[i][j] + " ");
		        }
		        System.out.println();
			}
		
	    }
    }
}

矩形面积交

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

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

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

样例输入
1 1 3 3
2 2 4 4

样例输出
1.00

import java.util.Scanner;

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

public class Main { 
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		double p[]=new double[4];
		double q[]=new double[4];
		for(int i=0;i<4;i++) {
			p[i]=scan.nextDouble();  //第一个矩形的两个点坐标
		}
		for(int j=0;j<4;j++) {
			q[j]=scan.nextDouble();  //第二个矩形的两个点坐标
		}
		
		double a=Math.min(p[0], p[2]);//下顶点的x坐标
		double b=Math.min(p[1], p[3]);//下顶点的y坐标
		double c=Math.max(p[0],p[2]);//上顶点的x坐标
		double d=Math.max(p[1], p[3]);//上顶点的y坐标
		
		double e=Math.min(q[0], q[2]);//下顶点的x坐标
		double f=Math.min(q[1], q[3]);//下顶点的y坐标
		double g=Math.max(q[0],q[2]);//上顶点的x坐标
		double h=Math.max(q[1], q[3]);//上顶点的y坐标
		
		double s;
		double W=0;//相交的部分的矩形的宽
		double H=0;//相交的部分的矩形的高
		if(e<=c&&e>=a) {
			if(g>c) 
				W=c-e;
			else if(g<=c)
				W=g-e;
		}
		else if(e<a) {
			if(g>=a&&g<=c)
				W=g-a;
			else if(g<a)
				W=0;
			else if(g>c)
				W=c-a;
		}
		else if(e>c)
			W=0;
		
		if(f<=d&&f>=b) {
			if(h>d)
				H=d-f;
			else if(h<=d)
				H=h-f;
		}
		else if(f<b) {
			if(h>=b&&h<=d)
				H=h-b;
			else if(h>d)
				H=d-b;
			else if(h<b)
				H=0;
		}
		else if(f>d)
			H=0;

		s=W*H;
		System.out.print(String.format("%.2f", s));
	}

}

区间k大数查询

问题描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。

输入格式
第一行包含一个数n,表示序列长度。

第二行包含n个正整数,表示给定的序列。

第三个包含一个正整数m,表示询问个数。

接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。

输出格式
总共输出m行,每行一个数,表示询问的答案。

样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2

样例输出
4
2

数据规模与约定
对于30%的数据,n,m<=100;
对于100%的数据,n,m<=1000;
保证k<=(r-l+1),序列中的数<=106。

import java.util.Scanner;

//给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。

public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt(); //序列长度
		
		int num[]=new int[n]; //给定的序列
		for(int i=0;i<n;i++)
			num[i]=scan.nextInt();
			
		int m=scan.nextInt(); //询问个数
		int ask[][]=new int[m][3];
		for(int j=0;j<m;j++) {
			for(int k=0;k<3;k++) {
				ask[j][k]=scan.nextInt();
			}
		}
		
		for(int j=0;j<m;j++) {
			int a=ask[j][0];//起始位置
			int b=ask[j][1];//结束位置
			int c=b-a+1;//这段中间的长度
			int d=ask[j][2];//第d大数
			
			int number[]=new int[c];
			for(int p=0,q=a-1;p<c;p++,q++) {
				number[p]=num[q];
			}
			
			int result=range(number,d);
			System.out.println(result);
		}
	}

	private static int range(int[] number, int d) {
		int n=number.length;
		for(int j=0;j<n;j++) {
			for(int k=0;k<n-1;k++) {
				if(number[k]<number[k+1]) {
					int x=number[k];
					number[k]=number[k+1];
					number[k+1]=x;
				}
			}
		}
		return number[d-1];
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值