2022-01-19每日刷题打卡

一、第六题:分类计数(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;
				}
			}
		}
	}
 
}

上一篇:嵌入式学习2022.1.19——C语言基础与提高


下一篇:剑指Offer 19.正则表达式匹配