以下为本人做的OJ题解
如有不足之处,欢迎大家评论指正。如看过后还有不明白的地方,或有更好的解题方法,欢迎大家在评论区留言讨论。
作者:HEAN
1.1 编程基础之输入与输出
1.1.1 Holle,word
题目:对于大部分编程语言来说,编写一个能够输出“Hello, World!”的程序往往是最基本、最 简单的。因此,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常工作。
题目地址:OpenJudge - 01:Hello, World!
直接使用 System.out.println(); 语句输出 Hello world 就OK,注意将内容使用双引号包裹起来
/**
* @author HEAN
* time 2024/10/11
*/
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
1.1.2 输出第二个整数
题目:输入三个整数,把第二个输入的整数输出。
导入 Scanner 类,这个类用于从控制台读取输入。定义三个int型变量接收输入的值,然后使用System.out.println(); 语句输出,最后关闭Scanner
import java.util.Scanner;
/**
* author HEAN
* time 2024/10/11
*/
public class Main {
public static void main(String[] args) {
//输入三个整数,把第二个输入的整数输出。
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int q = sc.nextInt();
System.out.println(m);
sc.close();
}
}
1.1.3 对齐输出
题目:读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们。
题目地址:OpenJudge - 03:对齐输出
import java.util.Scanner;
/**
* author HEAN
* time 2024/10/11
*/
public class Main {
public static void main(String[] args) {
//读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int q = sc.nextInt();
System.out.printf("%d%8d%8d",n,m,q);
sc.close();
}
}
1.1.4 输出保留3位小数的浮点数
题目:读入一个单精度浮点数,保留3位小数输出这个浮点数。
题目地址:OpenJudge - 04:输出保留3位小数的浮点数
import java.util.Scanner;
/**
* author HEAN
* time 2024/10/11
*/
public class Main {
public static void main(String[] args) {
//读入一个单精度浮点数,保留3位小数输出这个浮点数。
float f = new Scanner(System.in).nextFloat();
System.out.printf("%.3f",f);
}
}
1.1.5输出保留12位小数的浮点数
题目:读入一个双精度浮点数,保留12位小数,输出这个浮点数。
题目地址:OpenJudge - 05:输出保留12位小数的浮点数
本题使用以下java代码并未通过全部测试用例,是java语言机制导致,同样思路c++可全部通过
import java.util.Scanner;
/**
* author HEAN
* time 2024/10/11
*/
public class Main {
public static void main(String[] args) {
// 创建Scanner对象用于读取输入
Scanner scanner = new Scanner(System.in);
// 读取一个double类型的输入
double a = scanner.nextDouble();
// 使用System.out.printf来格式化输出,%.12f表示保留12位小数
System.out.printf("%.12f\n", a);
// 关闭scanner对象
scanner.close();
}
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
double a;
cin>>a;
cout<<fixed<<setprecision(12)<<a;
}
1.1.6 空格分隔输出
题目:读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数,然后按顺序输出它们,并且要求在他们之间用一个空格分隔。输出浮点数时保留6位小数。
读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数, 然后按顺序输出它们,并且要求在他们之间用一个空格分隔。输出浮点数时保留6位小数。
import java.util.Scanner;
/**
* author HEAN
* time 2024/10/11
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int i = sc.nextInt();
float f = sc.nextFloat();
double d = sc.nextDouble();
System.out.printf("%s %d %.6f %.6f",s,i,f,d);
}
}
1.1.7 输出浮点数
题目:读入一个双精度浮点数,分别按输出格式“%f”,“%f”保留5位小数,“%e”和“%g”的形式输出这个整数,每次在单独一行上输出。
题目地址:OpenJudge - 07:输出浮点数
本题使用以下java代码并未通过全部测试用例,是java语言机制导致,同样思路c++可全部通过
import java.util.Scanner;
/**
* author HEAN
* time 2024/10/11
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double d = sc.nextDouble();
System.out.printf("%f\n",d);
System.out.printf("%.6f\n",d);
System.out.printf("%e\n",d);
System.out.printf("%g",d);
}
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
double a;
scanf("%lf", &a);
printf("%f\n%.5f\n%e\n%g", a, a, a, a);
return 0;
}
1.1.8 字符三角形
题目:给定一个字符,用它构造一个底边长5个字符,高3个字符的等腰字符三角形。
题目地址:OpenJudge - 08:字符三角形
import java.util.Scanner;
/**
* author HEAN
* time 2024/10/11
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
sc.close();
// 遍历每一行
for (int i = 0; i < 3; i++) {
// 打印空格
for (int j = 0; j < 3 - i - 1; j++) {
System.out.print(" ");
}
// 打印星号
for (int k = 0; k < 2 * i + 1; k++) {
System.out.print(s);
}
// 每行打印完后换行
System.out.println();
}
System.out.println(" "+s+s+s);
System.out.println(" "+s);
}
}
1.1.9 字符菱形
题目:给定一个字符,用它构造一个对角线长5个字符,倾斜放置的菱形。
题目地址:OpenJudge - 09:字符菱形
import java.util.Scanner;
/**
* author HEAN
* time 2024/10/11
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
sc.close();
// 遍历每一行
for (int i = 0; i < 3; i++) {
// 打印空格
for (int j = 0; j < 3 - i - 1; j++) {
System.out.print(" ");
}
// 打印星号
for (int k = 0; k < 2 * i + 1; k++) {
System.out.print(s);
}
// 每行打印完后换行
System.out.println();
}
System.out.println(" "+s+s+s);
System.out.println(" "+s);
}
}
1.1.10 超级玛丽游戏
题目:超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。
/**
* author HEAN
* time 2024/10/11
*/
public class Main {
public static void main(String[] args) {
System.out.println(" ********\n" +
" ************\n" +
" ####....#.\n" +
" #..###.....##....\n" +
" ###.......###### ### ### ### ###\n" +
" ........... #...# #...# #...# #...#\n" +
" ##*####### #.#.# #.#.# #.#.# #.#.#\n" +
" ####*******###### #.#.# #.#.# #.#.# #.#.#\n" +
" ...#***.****.*###.... #...# #...# #...# #...#\n" +
" ....**********##..... ### ### ### ###\n" +
" ....**** *****....\n" +
" #### ####\n" +
" ###### ######\n" +
"############################################################## ##################################\n" +
"#...#......#.##...#......#.##...#......#.##------------------# #...#......#.##------------------#\n" +
"###########################################------------------# ###############------------------#\n" +
"#..#....#....##..#....#....##..#....#....##################### #..#....#....#####################\n" +
"########################################## #----------# ############## #----------#\n" +
"#.....#......##.....#......##.....#......# #----------# #.....#......# #----------#\n" +
"########################################## #----------# ############## #----------#\n" +
"#.#..#....#..##.#..#....#..##.#..#....#..# #----------# #.#..#....#..# #----------#\n" +
"########################################## ############ ############## ############");
}
}
输出之格式控制符
Java中的格式控制符主要用于System.out.printf()
等输出方法中,用于控制输出数据的格式。以下是对Java格式控制符的一个总结,按照不同的分类和用途进行归纳:
一、基本格式控制符
-
%d, %i:以十进制整数格式输出。可用于byte, short, int, long, Byte, Short, Integer, Long, BigInteger等类型。在
printf
中,%d
和%i
在功能上没有区别。 -
%f:以十进制浮点数格式输出。可用于float, double, Float, Double或BigDecimal等类型。默认输出6位小数,但可以通过指定精度(如
%.2f
)来控制小数位数。 -
%e, %E:以科学计数法浮点数格式输出。同样适用于float, double, Float, Double或BigDecimal等类型。
%e
使用小写字母(如e)表示指数,而%E
使用大写字母(如E)。 -
%o:以八进制整数格式输出。可用于byte, short, int, long, Byte, Short, Integer, Long, BigInteger等类型。
-
%x, %X:以十六进制整数格式输出。同样适用于上述整数类型。
%x
使用小写字母(如a, b, c, d, e, f),而%X
使用大写字母(如A, B, C, D, E, F)。 -
%c, %C:以字符格式输出。可用于byte, short, char, Byte, Short, Character, Integer等类型。
%c
输出小写字符,而%C
在某些上下文中可能用于输出大写字符,但注意在标准的printf
方法中,%C
并不改变字符的大小写。 -
%b, %B:输出boolean值。
%b
输出小写(true或false),而%B
输出大写(TRUE或FALSE)。 -
%s:输出字符串。
二、对齐与宽度
- 可以在
%
和格式字符之间添加宽度说明符(如%8d
)来控制输出宽度,并且可以通过添加-
(如%-8d
)来实现左对齐。 - 使用
0
可以在宽度说明符前指定空位填零(如%08d
)。
三、精度
- 对于浮点数,可以在
%
和f
、e
、E
之间添加.n
(如%.2f
)来指定小数点后的位数。
四、特殊格式
%n
:输出平台特定的换行符,如Windows下的\r\n
,Linux下的\n
,Mac OS下的\r
。%h, %H
:使用Integer.toHexString(arg.hashCode())
来得到输出结果的十六进制表示,常用于获取对象的哈希码的十六进制形式。
五、转义字符
\\
:输出反斜杠。\'
:输出单引号。\"
:输出双引号。\uxxxx
:以十六进制数指定Unicode字符输出。\xxx
:以八进制数指定Unicode字符输出(尽管这种用法在printf
中不常见,但它是Java字符串字面量中的有效转义序列)。
六、其他
%#x
,%#X
:输出带有十六进制标志的整数(如0x
或0X
前缀)。%
本身在字符串中需要表示为%%
。
总结来说,Java的格式控制符提供了丰富的选项来格式化输出数据,包括控制数据的类型、宽度、对齐方式、精度以及使用特殊格式和转义字符。通过合理使用这些格式控制符,可以生成符合需求的、格式良好的输出。