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

举报
计算机魔术师 发表于 2023/08/10 09:27:57 2023/08/10
【摘要】 🤵‍♂️ 个人主页: @计算机魔术师👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。蓝桥杯竞赛专栏 | 简单题系列 (一) 作者: 计算机魔术师 版本: 1.0 ( 2022.12.27 )摘要: 本文旨在准备明年2023的蓝桥杯竞赛,培养个人Java语法素养和手感。 希望可以帮助到一起备赛的小伙伴们。题目来自C语言网@[toc]前言:注意主类是 Main,编辑器用e...

在这里插入图片描述

🤵‍♂️ 个人主页: @计算机魔术师
👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

蓝桥杯竞赛专栏 | 简单题系列 (一)
作者: 计算机魔术师
版本: 1.0 ( 2022.12.27 )

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

@[toc]

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

一、求素数

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

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

N

输出格式

0N的素数

样例输入
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循环失效,只有再按下回车键才能输出剩余的, 有点百思不得其解的感觉🤦‍♂️🤦‍♂️。

在这里插入图片描述

  ✨谢谢你的阅读,您的点赞和收藏就是我创造的最大动力!✨		
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。