【蓝桥杯备赛系列 | 简单题】素数判断 & 字符串输入输出
🤵♂️ 个人主页: @计算机魔术师
👨💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。
摘要: 本文旨在准备明年2023的蓝桥杯竞赛,培养个人Java语法素养和手感。 希望可以帮助到一起备赛的小伙伴们。题目来自C语言网
@[toc]
前言:注意主类是 Main,编辑器用ecilips
一、求素数
考點: 输入输出,循环,Scanner
题目描述
用筛法求之N内的素数。
输入格式
N
输出格式
0~N的素数
样例输入
100
样例输出
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int num = reader.nextInt();
if(num >= 2)
System.out.println(2);
boolean judge = true;
// 知道所有偶数不可能为质数,循环奇数
for(int i=3;i<=num;i+=2) {
for(int j=2;j<i;j++) {
if(i%j == 0) {
judge=false;
break;
}
else {
judge=true;
}
}
if(judge == true)
System.out.println(i);
}
reader.close();
}
}
做完一题之后 要养成看他人 题解的好习惯,看了两个高分 题解,一个是用筛选法,多用一个数组标记和存贮,个人感觉复杂许多,第二个高分题解 和 这里的一样,不过代码更加精简,值得学习。
二、字符串的输入输出处理题目描述
考点: 字符串处理,Scanner | 注意点: Scanner.nextLine() 用法会吞掉回车
题目描述
字符串的输入输出处理。输入格式第一行是一个正整数N,最大为100。之后是多行字符串(行数大于N), 每一行字符串可能含有空格,字符数不超过1000。输出格式先将输入中的前N行字符串(可能含有空格)原样输出,再将余下的字符串(不含有空格)以空格或回车分割依次按行输出。每行输出之间输出一个空行。
样例输入
2
www.dotcpp.com DOTCPP
A C M
D O T CPP
样例输出
www.dotcpp.com DOTCPP
A C M
D
O
T
CPP
笔者初步代码:
思路是
用ArrayList 动态存贮Scanner.nextLine()循环读取的字符串, 收集总行数,判读读取是否为空字符停止循环,并对其他行使用split()分割输出
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
public class Main{
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
int num = Integer.parseInt(scanner.nextLine());
// System.out.println(num);
// scanner.nextLine(); // 读取掉换行符
// String []str = new String[num]; // 不允许数组是未指定的
List<String> strList = new ArrayList();
int num_string = 0;
for(;;){
String get_string = scanner.nextLine();
if(get_string.equals("")) { // 判断是否读取到换行符
break;
}
strList.add(get_string); // 收集行字符串
num_string += 1;
}
for(int j=0;j<num_string;j++) {
String preNumString = strList.get(j);
if(j<num) {
System.out.println(preNumString + '\n');
}
else {
String temp[] = preNumString.split(" ");
for(int k=0;k<temp.length;k++) {
System.out.println(temp[k] + '\n');
}
}}
// System.out.println("test: " + strList);
scanner.close();
// System.out.print("this is a \r\n sad sadasd"); // \r return是回车,光标到行首,在控制台会表现的和换行一样, 你在此基础再加上\n换行会发现只换了一行
}
}
个人在ecilipse测试结果:
个人测试到没问题,但是运行报错如上,个人目前还没测试出来边界情况,有大佬看出来了希望在评论区指点一下🙋♂️🙋♂️。
在看了优秀题解之后,确实对Java语法代码很理解才能写出这么简洁的代码
import java.util.Scanner;
public class bluecup_2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<=n+1;i++){
String s=sc.nextLine();
if(i==1)
continue;
System.out.println(s+"\n");
}
while(sc.hasNext()) {//是否有输入
System.out.println(sc.next()+"\n");
}
}
}
但是让我好奇的是,这样的代码存在一个问题,当我一个一个输出,比如先输入 2
,在输入www.dotcpp.com DOTCPP
这样,此时控制台会立马输出www.dotcpp.com DOTCPP
而不会等候, 如果直接输入整体
2
www.dotcpp.com DOTCPP
A C M
D O T CPP
此时只会输出 2
行后面的while
循环失效,只有再按下回车键才能输出剩余的, 有点百思不得其解的感觉🤦♂️🤦♂️。
✨谢谢你的阅读,您的点赞和收藏就是我创造的最大动力!✨
- 点赞
- 收藏
- 关注作者
评论(0)