前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【蓝桥杯备赛系列 | 简单题】素数判断 & 字符串输入输出

【蓝桥杯备赛系列 | 简单题】素数判断 & 字符串输入输出

作者头像
计算机魔术师
发布2022-12-29 16:12:03
2500
发布2022-12-29 16:12:03
举报
文章被收录于专栏:计算机魔术师计算机魔术师
在这里插入图片描述
在这里插入图片描述

🤵‍♂️ 个人主页: @计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 蓝桥杯竞赛专栏 | 简单题系列 (一) 作者: 计算机魔术师 版本: 1.0 ( 2022.12.27 )


摘要: 本文旨在准备明年2023的蓝桥杯竞赛,培养个人Java语法素养和手感。 希望可以帮助到一起备赛的小伙伴们。题目来自C语言网

文章目录

前言:注意主类是 Main编辑器用ecilips

一、求素数

考點: 输入输出,循环,Scanner

题目描述 用筛法求之N内的素数。 输入格式

代码语言:javascript
复制
N

输出格式

代码语言:javascript
复制
0~N的素数

样例输入 100 样例输出

代码语言:javascript
复制
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
代码语言:javascript
复制
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行字符串(可能含有空格)原样输出,再将余下的字符串(不含有空格)以空格或回车分割依次按行输出。每行输出之间输出一个空行。

样例输入

代码语言:javascript
复制
2
www.dotcpp.com DOTCPP
A C M
D O T CPP

样例输出

代码语言:javascript
复制
www.dotcpp.com DOTCPP

A C M

D

O

T

CPP

笔者初步代码:

思路是

用ArrayList 动态存贮Scanner.nextLine()循环读取的字符串, 收集总行数,判读读取是否为空字符停止循环,并对其他行使用split()分割输出

代码语言:javascript
复制
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语法代码很理解才能写出这么简洁的代码

代码语言:javascript
复制
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而不会等候, 如果直接输入整体

代码语言:javascript
复制
2
www.dotcpp.com DOTCPP
A C M
D O T CPP

此时只会输出 2行后面的while循环失效,只有再按下回车键才能输出剩余的, 有点百思不得其解的感觉🤦‍♂️🤦‍♂️。

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、求素数
  • 二、字符串的输入输出处理题目描述
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档