第十三届蓝桥杯JavaB组前三题:试题A:星期计算、试题B:山、试题C:字符统计

试题A:星期计算

先求第一个余数

\frac{20^{22}}{7}= \frac{(14+6)^{22}}{7} =>6^{22}

再求第二个余数

\frac{(36)^{22}}{7}=\frac{(35+1)^{22}}{7}=>1^{22}

故,星期6过一天是星期天

试题B:山

此题通过全部进行一遍遍历可以得到结果3138

用了两个函数 :

(1)isHuiWen(int str)   : 用来查看他是不是回文数,以下是回文数的例子

 我们通过字符串 strstr的反转 进行比较,就能确定第一步,他是回文数,用到了StringBuff

是回文数就会返回true

(2)Up(int str)  : 判断他前一半的数字是否是单调递增的,如果是就返回true

(3)通过两个函数的判断,就可以知道他是不是" 山 "

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int ans = 0;
        for(int i=2020;i<=2022222022;i++){
            if(isHuiWen(i) && Up(i)){
                //System.out.println(i);
                ans++;
            }
        }
        System.out.println(ans);
        scan.close();
    }

    //str是不是回文数
    public static boolean isHuiWen(int str){
        StringBuffer str1 = new StringBuffer(str+"");

        //用str 比较 str的逆序
        if(str1.toString().equals(str1.reverse().toString())){
            return true;
        }
        return false;
    }
        
    //str的前一半是否是单调递增
    public static boolean Up(int str){
        String st=str+"";
        //三目运算符判断是单数还是双数
        int len=st.length()%2==0 ? st.length()/2 : st.length()/2+1;

        for(int i=1;i<len;i++) {
            if(st.charAt(i)<st.charAt(i-1)) {
                return false;
            }
        }
        return true;
    }

试题C:字符统计

(1)用arrs[26]用来存储A~Z,26个字母对应的个数,A对应下标0,出现一次就对arrs[字母]++;

        用Max记录当前字母出现次数最大值;

        ans为当前出现最大值的——字母的字符串,如果当前的下标的字母出现次数和Max相等,就         一起加入ans(ans = B + A)两个字符串拼接起来了;

(2)但是这样拼接的字符串顺序不是ABCD,可能乱序;(B比A先出现)

         故重现遍历一遍arrs[]数组,找到下标等于Max的字母,让其按顺序拼接到result上;

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();

        //char A = 65,arrs[26]用来存储A~Z 26个字母对应的个数,A对应下标0,出现一次就对arrs[字母]++
        int[] arrs = new int[26];
        //temp 用于交换数据;Max用于保存当前出现最多字母的个数,EG:BBCABAC——AB都出现了3次
        int temp = 0,Max = 0;
        //ans 用于保存顺序扫描过去,出现最多次数字母的 字符串组 EG:BA(B比A先出现)
        String ans = "";

        for(int i=0;i<str.length();i++){
            //由于A的ASCII是65,故str.charAt(i)-65=0 =>arrs[0]自增
            temp = ++arrs[str.charAt(i)-65];
            //如果当前下标的字母出现次数没有Max大就continues;如果大于Max就取代ans,并让Max更新;
            //如果当前的下标的字母出现次数和Max相等,就一起加入ans(ans = B + A)两个字符串拼接起来了
            if(temp<Max){
                continue;
            }else if(temp>Max){
                Max = temp;
                ans = str.charAt(i)+"";
            }else{
                ans=ans+str.charAt(i);
            }
        }
        //但是会出现BA顺序相反的情况,故重现遍历一遍arrs[26]数组,找到下标等于Max的字母,让其拼接到result上
        String result = "";
        for (int i = 0; i < 26; i++) {
            if(arrs[i]==Max) {
                result = result + (char) (i + 65);
            }
        }
        System.out.println(result);
        scan.close();
    }

   

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值