7-26 单词长度
分数 15
作者 翁恺
单位 浙江大学
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。

输入格式:
输入在一行中给出一行文本,以.结束

提示:用scanf("%c",...);来读入一个字符,直到读到.为止。

输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

输入样例:
It's great to see you here.
输出样例:
4 5 2 3 3 4

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine().trim();

if (line.isEmpty() || line.equals(".")) {
System.out.println(""); // Print an empty line for empty input
return;
}

if (line.endsWith(".")) {
line = line.substring(0, line.length() - 1).trim(); // Remove the trailing dot and trim spaces
}

String[] words = line.split("\\s+"); // Split by one or more whitespace characters

StringBuilder result = new StringBuilder();
for (String word : words) {
if (!word.isEmpty()) { // Check to avoid empty words
result.append(word.length()).append(" ");
}
}

// Remove the trailing space and print the result
if (result.length() > 0) {
result.setLength(result.length() - 1);
}
System.out.println(result.toString());
}
}
7-27 冒泡法排序
分数 20
作者 徐镜春
单位 浙江大学
将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。

本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。

输入格式:
输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。

输出格式:
在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

输入样例:
6 2
2 3 5 1 6 4
输出样例:
2 1 3 4 5 6

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

// 读取N和K
int N = scanner.nextInt();
int K = scanner.nextInt();
int[] array = new int[N];

// 读取N个整数
for (int i = 0; i < N; i++) {
array[i] = scanner.nextInt();
}

// 执行冒泡排序,直到第K遍
for (int pass = 0; pass < K; pass++) {
for (int i = 0; i < N - pass - 1; i++) {
if (array[i] > array[i + 1]) {
// 交换array[i]和array[i + 1]
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}

// 输出第K遍后的结果
for (int i = 0; i < N; i++) {
if (i > 0) {
System.out.print(" ");
}
System.out.print(array[i]);
}
System.out.println();
}
}

7-28 猴子选大王
分数 20
作者 徐镜春
单位 浙江大学
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:
输入在一行中给一个正整数N(≤1000)。

输出格式:
在一行中输出当选猴王的编号。

输入样例:
11
输出样例:
7

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
scanner.close();

// 创建一个链表来存储猴子的编号
List<Integer> monkeys = new LinkedList<>();
for (int i = 1; i <= N; i++) {
monkeys.add(i);
}

int index = 0; // 当前报数的位置
while (monkeys.size() > 1) {
index = (index + 2) % monkeys.size(); // 计算要淘汰的猴子的索引 (报到3)
monkeys.remove(index); // 移除该猴子
}

// 输出最后剩下的猴子的编号
System.out.println(monkeys.get(0));
}
}

7-29 删除字符串中的子串
分数 20
作者 白洪欢
单位 浙江大学
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。

输入格式:
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。

输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。

输入样例:
Tomcat is a male ccatat
cat
输出样例:
Tom is a male

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

// 读取第一个字符串 S1
String S1 = scanner.nextLine();
// 读取第二个字符串 S2
String S2 = scanner.nextLine();

// 处理删除操作
while (S1.contains(S2)) {
S1 = S1.replace(S2, "");
}

// 输出结果
System.out.println(S1);

scanner.close();
}
}
7-30 字符串的冒泡排序
分数 20
作者 陈越
单位 浙江大学
我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。

输入格式:
输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

输出格式:
输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。

输入样例:
6 2
best
cat
east
a
free
day
输出样例:
best
a
cat
day
east
free


import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int K = scanner.nextInt();
scanner.nextLine();
String[] strings = new String[N];
for (int i = 0; i < N; i++) {
strings[i] = scanner.nextLine();
}
scanner.close();
for(int i = 0; i < K; i++){
for(int j= 0;j<N-i-1;j++){
if(strings[j].compareTo(strings[j+1]) > 0){
String temp = strings[j];
strings[j] = strings[j+1];
strings[j+1] = temp;
}
}
}
for(String s : strings){
System.out.println(s);
}
}
}