一、第六题:分类计数(15分)
(1)题目描述
输入一个字符串,请输出这个字符串包含多少个大写字母,多少个小写字母,多少个数字。
【输入格式】
输入一行包含一个字符串。
【输出格式】
输出三行,每行一个整数,分别表示大写字母、小写字母和数字的个数。
【样例输入】
1+a=Aab
【样例输出】
1
3
1
【评测用例规模与约定】
对于所有评测用例,字符串由可见字符组成,长度不超过 100。
(2)代码实现
import java.io.BufferedInputStream;
import java.util.Scanner;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str=sc.nextLine();
sc.close();
int Big=0;
int small=0;
int digtal=0;
for(int x=0;x<str.length();x++){//1+a=Aab
if(str.charAt(x)>='a' && str.charAt(x)<='z'){
small++;
}
if(str.charAt(x)>='A' && str.charAt(x)<='Z'){
Big++;
}
if(str.charAt(x)>='0' && str.charAt(x)<='9'){
digtal++;
}
}
System.out.println(Big);
System.out.println(small);
System.out.println(digtal);
}
}
二、 第七题:八次求和(20分)
(1)题目描述
【输入格式】
输入的第一行包含一个整数 n。
【输出格式】
输出一行,包含一个整数,表示答案。
【样例输入】
2
【样例输出】
257
【样例输入】
987654
【样例输出】
43636805
【评测用例规模与约定】
对于 20% 的评测用例,1 ≤ n ≤ 20。
对于 60% 的评测用例,1 ≤ n ≤ 1000。
对于所有评测用例,1 ≤ n ≤ 1000000。
(2)代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BigInteger Bigmod = BigInteger.valueOf(123456789);
BigInteger Bigsum = BigInteger.valueOf(0);
int n=sc.nextInt();
for(int i=1;i<=n;i++){
BigInteger c = BigInteger.valueOf(i);
Bigsum=Bigsum.add(c.multiply(c).multiply(c).multiply(c).multiply(c)
.multiply(c).multiply(c).multiply(c));
}
BigInteger sum = Bigsum.mod(Bigmod);
System.out.println(sum);
}
}
三、第八题:字符串编码(20分)
(1)题目描述
小明发明了一种给由全大写字母组成的字符串编码的方法。对于每一个大写字母,小明将它转换成它在 26 个英文字母中序号,即 A → 1, B → 2, … Z →26。这样一个字符串就能被转化成一个数字序列:比如 ABCXYZ → 123242526。现在给定一个转换后的数字序列,小明想还原出原本的字符串。当然这样的还原有可能存在多个符合条件的字符串。小明希望找出其中字典序最大的字
符串。
【输入格式】
一个数字序列。
【输出格式】
一个只包含大写字母的字符串,代表答案
【样例输入】
123242526
【样例输出】
LCXYZ
【评测用例规模与约定】
对于 20% 的评测用例,输入的长度不超过 20。
对于所有评测用例,输入的长度不超过 200000。
(2)代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] word = new char[27]; //将26个字母存储起来
for(int i=0;i<26;i++) {
word[i+1] = (char)('A'+i);
}
String str = sc.nextLine();
String[] s = str.split("");
int len = str.length();
int[] num = new int[len]; //分割每一个数字
for(int i=0;i<len;i++) {
num[i] = Integer.parseInt(s[i]);
}
int index = 2; //从第三个数开始索引,标记判断到哪个数了
while(true) { //从头到尾对遍历一遍数列
if(index<len && num[index]!=0) { //处理其中没有0的情况
int tmp = num[index-2]*10+num[index-1];
if(tmp<=26) { //字典序即越大的字母越要在前面,所以先考虑能否形成两位数并且在字母编码范围内
System.out.print(word[tmp]);
index+=2;
}
else {
System.out.print(word[num[index-2]]);
index+=1;
}
}
else if(index<len && num[index]==0) { //处理其中有0的情况
System.out.print(word[num[index-2]]);
index+=1;
}
else if(index-1==len){ //当最后数列中只剩一个数没有便利
System.out.print(word[num[index-2]]);
break;
}
else if(index==len) { //到最后数列中剩两位数没有便利
int tmp = num[index-2]*10+num[index-1];
if(tmp<=26) {
System.out.print(word[tmp]);
break;
}
else {
System.out.print(word[num[index-2]]);
index+=1;
}
}
}
}
}