JAVA 天梯赛 (难点)
1.如何保留一位小数
输入格式:
输入第一行给出一个正整数H(100 < H ≤ 300),为某人身高。
输出格式:
在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。
输入样例:
169
输出样例:
124.2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int H=sc.nextInt();
double j=0;
if(H<=300&&H>100) {
j=(H-100)*0.9*2;
System.out.println(String.format("%.1f",j));
}
}
}
保留小数 解析
String.format("%.1f",j)); // String.format()函数 ,把 j 格式化为 %.1f 样子 ,小数点后一位浮点型数据
2.如何使输入的数值横向排列
image.png image.png创建一个 Scanner 实例
3.如何把字符串复制给数组
toCharArray() 方法将字符串转换为字符数组。
3.世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String A=sc.nextLine();
char[] arry=A.toCharArray();
for(int i=6;i<arry.length;i++) {
System.out.print(arry[i]);
}
System.out.print(arry[2]);
for(int i=0;i<2;i++) {
System.out.print(arry[i]);
}
for(int i=2;i<5;i++) {
System.out.print(arry[i]);
}
}
}
4.输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String shu = sc.nextLine();
char[] c = shu.toCharArray();
int[] a = new int[c.length];
for (int i = 0; i < c.length; i++) { //把字符型数组转化为整型
a[i] = c[i];
}
for (int i = 0; i < a.length; i++) {
switch (a[i]) {
case '0':
System.out.print("ling");
break;
case '1':
System.out.print("yi");
break;
case '2':
System.out.print("er");
break;
case '3':
System.out.print("san");
break;
case '4':
System.out.print("si");
break;
case '5':
System.out.print("wu");
break;
case '6':
System.out.print("liu");
break;
case '7':
System.out.print("qi");
break;
case '8':
System.out.print("ba");
break;
case '9':
System.out.print("jiu");
break;
default:
System.out.print("fu");
break;
}
if (i < a.length - 1) { //防止首尾出现空格
System.out.print(" ");
}
}
}
}
image.png
切记:输出的拼音首和尾没有空格
5.给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
int Sum = 0;
int t = 0;
t = B - A;
for (int i = 0; i <= t; i++) {
if (i % 5 == 0 && i != 0) {
System.out.print("\n");
}
int k = A++;
System.out.print(String.format("%5d", k)); //让 k 输出的字符占五个空格字符
Sum = Sum + k;
}
System.out.print("\nSum = " + Sum);
}
}
输出:
image.png
6.本题要求将输入的任意3个整数从小到大输出。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
int c = s.nextInt();
int k2 = 0, k3 = 0;
int k1 = Math.max(c, Math.max(a, b)); //三个数比较大小
if (k1 == a) {
k2 = Math.max(b, c);
if (k2 == b) {
k3 = c;
} else {
k3 = b;
}
}
if (k1 == b) {
k2 = Math.max(a, c);
if (k2 == a) {
k3 = c;
} else {
k3 = a;
}
}
if (k1 == c) {
k2 = Math.max(b, a);
if (k2 == b) {
k3 = a;
} else {
k3 = b;
}
}
System.out.println(k3 + "->" + k2 + "->" + k1);
}
}
Math.max(a, b) 比较a,b大小的函数
7.Java 拆分字符串的方法
split()
方法根据匹配给定的正则表达式来拆分字符串。
例如:
String[] b = a.split(":");
注意:
. 、 | 和 * 等转义字符,必须得加 \。
注意:
多个分隔符,可以用 | 作为连字符
8.将字符串类型转化为整型的操作
parseInt()
方法用于将字符串参数作为有符号的十进制整数进行解析。
例如:
int x =Integer.parseInt("9"); // 9
double c = Double.parseDouble("5"); //5.0
9.输出值前面要带0
printf("%02d" ,3) //%02d 整数不够2列就补上0
10.微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String a = s.nextLine();
String[] b = a.split(":");
int h = Integer.parseInt(b[0]);
int m = Integer.parseInt(b[1]);
int time = 0;
if (h >12) {
if (m == 0) {
time = h - 12;
} else {
time = h - 11;
}
for (int i = 0; i < time; i++) {
System.out.print("Dang");
}
} else {
System.out.print(String.format("Only %02d:%02d. Too early to Dang.\n", h, m));
//如果整数不够2列就补上0 比如 printf("%02d" ,3)
}
}
}
7.据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
二维数组
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int myarr[][] = new int[a][2]; //二维数组的定义
double sum = 0;
for (int i = 0; i < a; i++) {
for (int j = 0; j < 2; j++) {
myarr[i][j] = s.nextInt();
}
}
for (int i = 0; i < a; i++) {
sum = 2 * ((myarr[i][0] - 100) * 0.9);
if (Math.abs(myarr[i][1] - sum) < 0.1 * sum) {
System.out.println("You are wan mei!");
} else if ((myarr[i][1] - sum) >= 0.1 * sum) {
System.out.println("You are tai pang le!");
} else {
System.out.println("You are tai shou le!");
}
sum = 0;
}
}
}
8.强制类型转换
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
double sum = 0;
if (b > 0) {
sum = (double) a / b; //让整型相除变为浮点型
System.out.printf(a + "/" + b + "=" + "%.2f", sum);
}
if (b < 0) {
sum = (double) a / b;
System.out.printf(a + "/(" + b + ")=" + "%.2f", sum);
}
if (b == 0) {
System.out.println(a + "/" + b + "=Error");
}
}
}
9.大坑(Java的Scanner输入时,next()和nextLine()的区别)
首先是大家共所周知的区别
nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。
接下来是重头戏
next()在输入有效字符之后,将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
nextLine()方法的结束符只是Enter键
所以
nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。
10.出生年
HashSet<Integer> set = new HashSet<Integer>();
关于HashSet的各种使用方法总结:
https://blog.csdn.net/jinqianwang/article/details/80030060
从一个数据中找出有几个不同的数,这是一个泛型的写法,表示 这个集合中只能保存 integer 类型的对象,其他对象无法保存,
// HashSet是set接口的实现类,也是我们最常用的set集合储存的是无序,唯一的对象
// HashSet是是使用equals来进行对象对比,确定数据是唯一的
import java.util.HashSet; // 导入 HashSet 包
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);
String r = s.nextLine();
String[] input = r.split(" ");
int y = Integer.parseInt(input[0]);
int n = Integer.parseInt(input[1]);
for (int i = y;; i++) {
// HashSet是set接口的实现类,也是我们最常用的set集合储存的是无序,唯一的对象
HashSet<Integer> set = new HashSet<Integer>();
int num = i;
for (int j = 0; j < 4; j++) {
// HashSet 的 add 方法不能加重复值
set.add(num % 10); // set内的元素不重复.
num /= 10; // 算出每一位的数字的大小.
}
// 当set的大小等于n的时候
if (set.size() == n) {
System.out.printf("%d %04d", i - y, i);
break;
}
}
}
}
11.个位数统计
如何把字符串中的某个字符转为整型
-48 或者 -'0'
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);
String shu = s.next();
int[] n = new int[10];
for (int i = 0; i < shu.length(); i++) {
//用数组的 i 存放数字,第 i 个数组的值存放这个 i 出现的次数
n[shu.charAt(i) - 48]++; //单个字符型转为整型 -48 或者 -'0'
}
for (int i = 0; i < n.length; i++) {
if (n[i] != 0) {
System.out.println(i+":" +n[i]);
}
}
}
}
12.字符串拆分赋值给字符数组
char[] c = n.toCharArray(); // n是字符串数组,c 是字符型数组
13.把整型变为字符串类型
int i = 0;
String s = String.valueOf(i);
String s = Integer.toString(i);
String s = "" + i;