java_study
7-2
有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。
输出格式:
输出四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
import java.util.Arrays;
import java.util.Scanner;
@SuppressWarnings("AlibabaRemoveCommentedCode")
public class Main {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
String firstTime=input.next();
int firstHour=0;
int firstMinute=0;
int allPastMinute=input.nextInt();
int endHour=0;
int endMinute =0;
if(firstTime.length()==4) {
firstHour=(firstTime.charAt(0)-'0')*10+(firstTime.charAt(1)-'0');
firstMinute=(firstTime.charAt(2)-'0')*10+(firstTime.charAt(3)-'0');
}
else {
firstHour=(firstTime.charAt(0)-'0');
firstMinute=(firstTime.charAt(1)-'0')*10+(firstTime.charAt(2)-'0');
}
int allFirstMinute=firstMinute+firstHour*60;
int allEndMinute=allFirstMinute+allPastMinute;
endHour=allEndMinute/60;
endMinute=allEndMinute%60;
if(endMinute<10) {
System.out.print(endHour+"0"+endMinute);
}
else{
System.out.printf("%d%d",endHour,endMinute);
}
}
}
7-15
根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
2
π
=1+
3
1
+
3×5
2!
+
3×5×7
3!
+⋯+
3×5×7×⋯×(2n+1)
n!
+⋯
输入格式:
输入在一行中给出小于1的阈值。
输出格式:
在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。
输入样例:
0.01
输出样例:
3.132157
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
double inti=input.nextDouble();
int i=1;
double sum=1.0;
for(double number=1;number>inti;i++)
{
number= (double)(number/(2*i+1))*i;
sum+=number;
}
System.out.printf("%.6f",2*sum);
}
}
7-29
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
输入格式:
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
输入样例:
Tomcat is a male ccatat
cat
输出样例:
Tom is a male
import java.util.Arrays;
import java.util.Scanner;
@SuppressWarnings("AlibabaRemoveCommentedCode")
public class Main {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
String sFirst=input.nextLine();
String sLast=input.nextLine();
StringBuilder newS= new StringBuilder();
while(true)
{
newS.delete(0,newS.length());
if(sFirst.contains(sLast))
{
for(int i=0;i<sFirst.indexOf(sLast);i++)
{
newS.append(sFirst.charAt(i));
}
sFirst=sFirst.substring(sFirst.indexOf(sLast)+sLast.length(),sFirst.length());
sFirst=newS+sFirst;
}
else {
break;
}
}
System.out.print(sFirst);
}
}
7-27
7-27 冒泡法排序 (20 分)
将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。
本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。
输入格式:
输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。
输出格式:
在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。
输入样例:
6 2
2 3 5 1 6 4
输出样例:
2 1 3 4 5 6
import java.util.Arrays;
import java.util.Scanner;
@SuppressWarnings("AlibabaRemoveCommentedCode")
public class Main {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int []numberInt=new int[101];
int n,k;
n=input.nextInt();
k=input.nextInt();
for(int i=0;i<n;i++) {
numberInt[i]=input.nextInt();
}
int temp=0;
for(int j=0;j<k;j++) {
for(int h=0;h<n-j-1;h++){
if(numberInt[h]>numberInt[h+1]) {
temp=numberInt[h];
numberInt[h]=numberInt[h+1];
numberInt[h+1]=temp;
}
}
}
for(int i=0;i<n;i++) {
System.out.print(numberInt[i]);
if(i!=n-1) {
System.out.print(" ");
}
}
}
}