蓝桥杯 ADV_193 算法提高 新建Microsoft Word文档 (java)
发布日期:2021-06-28 15:58:14 浏览次数:3 分类:技术文章

本文共 2352 字,大约阅读时间需要 7 分钟。

 算法提高 新建Microsoft Word文档  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题目叫《新建Microsoft Word文档》吗?”,L大喜,一拍桌子,说:“好,就叫这个名字了。”

  仔细观察,当你新建一个word文档时,会得到一个名为“新建 Microsoft Word 文档.doc”的文件,再新建一个,则名为“新建 Microsoft Word 文档(2).doc”,再新建,便是“新建 Microsoft Word 文档(3).doc”。不断新建,编号不断递增。倘若你现在新建了三个文档,然后删除了“新建 Microsoft Word 文档(2).doc”,再新建就又会得到一个“新建 Microsoft Word 文档(2).doc”。


  严格说,Windows在每次新建文档时,都会选取一个与已有文件编号不重复的最小正整数作为新文档的编号。


  请编程模拟以上过程,支持以下两种操作

  New:新建一个word文档,反馈新建的文档的编号

  Delete id:删除一个编号为id的word文档,反馈删除是否成功

  初始时一个文件都没有,“新建 Microsoft Word 文档.doc”的编号算作1。
输入格式
  第一行一个正整数n表示操作次数,接下来n行,每行表示一个操作。若该行为”New”,则表示新建,为”Delete id”则表示要删除编号为id的文档,其中id为一个正整数。操作按输入顺序依次进行。
输出格式
  对于输入的每一行,输出其反馈结果。对于新建操作,输出新建的文档的编号;对于删除操作,反馈删除是否成功:如果删除的文件存在,则删除成功,输出”Successful”,否则输出”Failed”。
样例输入
12

New

New

New

Delete 2

New

Delete 4

Delete 3

Delete 1

New

New

New

Delete 4
样例输出
1

2

3

Successful

2

Failed

Successful

Successful

1

3

4

Successful
数据规模和约定
  操作次数(即输入的行数)不超过1481

  删除编号的数值不超过2012

写这篇文章,还是为了自己能理解scanner.next()和scanner.nextline()的区别。

在jdk6中文版帮助文档中找到以下资料:

nextLine

public  nextLine()
此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。

因为此方法会继续在输入信息中查找行分隔符,所以如果没有行分隔符,它可能会缓冲所有输入信息,并查找要跳过的行。

返回:
跳过的行
抛出:
- 如果未找到这样的行
- 如果此扫描器已关闭

next

public  next()
查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息。即使以前调用 返回了
true,在等待要扫描的输入时此方法也可能阻塞。

指定者:
接口
<> 中的
返回:
下一个标记
抛出:
- 如果没有更多标记可用
- 如果此扫描器已关闭
另请参见:

转载于:

简单的说。

nexitline()方法:结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

next()方法:一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。

例子:

1、

Scanner scanner = new Scanner(System.in);

String string = scanner.nextLine();
System.out.println(string);

2、

Scanner scanner = new Scanner(System.in);

String string2 = scanner.next();
System.out.println(string2);

如果在控制台上(Console)分别输入“ hello 2 ”(注意前、后和中间都有空格),第1个例子会输出“ hello 2 ”(注意前、后和中间都有空格),第2个例子会输出“hello”。

因为第2个例子next()方法会认为空格键是结束符!!!

思路:

先创建一个长度为1500的数组arr(因为题目提到操作次数不超过1481,创建数组时,系统会初始化为0),因为New的第一个字母为‘N’,Delete的第一个字母为‘D’,然后使用字符串的函数charAt()取得字符串的第一个字符判断,如果数组值为0则还没有被创建,如果数组值为1则认为以创建。

代码如下:

import java.util.Scanner;public class Main {	public static void main(String[] args) throws Exception{		// TODO Auto-generated method stub		Scanner scanner = new Scanner(System.in);		int[] arr = new int[1500];		int n = scanner.nextInt();		for(int i=0;i

转载地址:https://blog.csdn.net/xiaodingqq/article/details/78837154 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:蓝桥杯 ADV-155 上帝造题5分钟 (java)
下一篇:蓝桥杯 ADV168 算法提高 快乐司机(贪心 快排)(java)

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月29日 19时29分30秒