金山云暑期Java开发笔试题2022.04.14
第一题【简单字符串题】 AC
题目描述
小明的电脑这几天出了一点问题:在输入英文的时候,有一些单词会莫名其妙地在后面重复一次或多次。例如:输入“Who are you”,有时候会变成“Who are are you”。你能否编写一个程序帮助小明去掉那些相邻的、重复出现的单词中的第二个单词?注意:
(1) 为了对问题进行简化,在输入数据中均不包含标点符号;
(2) 单词之间统一用一个英文的空格隔开;
(3)单词不区分大小写,即“Who"和"who”当做同一个单词看待;
(4)不需要考虑输入数据中本身存在两个单词重复的情况,即只要出现单词重复都需要去掉
第二个;
(5)特别的,对于多个连续出现的重复单词,只需要保留第一个。
输入描述
单组输入。 输入一个长度不超过2000的字符串,该字符串由若干个英文单词和英
文空格组成。
输出描述
输出按照要求去掉重复单词之后的字符串。
样例输入
Who are Are you
样例输出
Who are you
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String line = sc.nextLine(); String[] spl = line.split(" "); int n = spl.length; System.out.print(spl[0]); String pre = spl[0]; for (int i = 1; i < n; ++i) { if (!pre.toLowerCase().equals(spl[i].toLowerCase())) { System.out.print(" " + spl[i]); pre = spl[i]; } } } }
第二题【快速幂】 AC
题目描述
小明在尝试把一些分子为1的分数(1/x)转化为小数。使用普通计算器的除法功能可以实
现,但是保留的小数位数非常有限。而小明希望得到n位小数,而且要从小数点后面第d位
开始的n位小数。例如,x=13,d=4,n=3时,1/13=0.07692307692....,从小数点后第四
位开始取三位数,答案是923。现在小明想要计算一些数更大的情况(2<=x<=10000,
1<=d<=1000000000,1<=n<=10000),请你写个程序帮帮他。
输入描述
一行,三个整数x,d,n,用空格隔开,含义如题干。输出描述
一行,一个字符串,所取的n位数,不需要隔开。
样例输入
13 4 3
样例输出
923
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long x = sc.nextLong(); long d = sc.nextLong(); long n = sc.nextLong(); long a = 10, b = d - 1; long res = 1; while (b > 0) { // 快速幂 if ((b & 1) == 1) { res = res * a % x; } a = a * a % x; b >>= 1; } for (long i = d; i < n + d; ++i) { res *= 10; System.out.print(res / x); res %= x; } } }#金山云##实习##笔试题目#