CCF认证201312前三题:出现最多的数、ISBN编码、最大矩形

201312-1出现最多的数:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); //n代表数字的总个数
        int[] num = new int[10001]; // 0<=数字<=10000,数字对应数组下标,相应的数组的值为该数字出现的次数

        for(int i=0; i<n; i++){ //整型数组默认初始化为0
                                //通过让数字对应下标的数组自增,完成计数
            ++num[sc.nextInt()];
        }

        int maxCount = -1, result = 0;
        for(int i=0; i<10001; i++){ 
            if(maxCount < num[i]){
                maxCount = num[i];
                result = i;
            }
        }
        System.out.println(result);
    }
}

201312-2 ISBN编码:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        char[] num = new char [13];
        for(int i=0; i<13; i++){ //将ISBN字符串转化为字符,放入字符数组num
            num[i] = str.charAt(i);
        }
        int trueNum = 0;
        for(int i=0, j=0; i<12; i++){ //总共12个字符+1个标识符
            if(i != 1 && i != 5 && i != 11){ //跳过 '-' 符号
                trueNum += (num[i]-'0')*(++j); //计算正确的标识符
            }
        }
        trueNum %= 11;
        if(trueNum == (num[12]-'0') || (num[12] == 'X' && trueNum == 10)){ //注意字符转换为整型,减去'0'的ASCII码
            System.out.println("Right");
        }
        else{
            System.out.print(str.substring(0, 12)); //前12个字符肯定是正确的,直接输出
            if(trueNum == 10){
                System.out.println('X');
            }
            else{
                System.out.println(trueNum);
            }
        }
    }
}

201312-3 最大矩形:

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //想象有一个水平线,放在num[i]顶端,当左右出现小于num[i]的值,去掉小于num[i]后之间的“长度”就是宽
        Scanner sc = new Scanner(System.in);
        int count = sc.nextInt();
        int[] num = new int [count]; //记录数组
        int[] area = new int[count]; //记录所有面积,整数个数count,面积数同count
        for(int i=0; i<num.length; i++){
            num[i] = sc.nextInt();
        }
        for(int i=0; i<num.length; i++){
            area[i] = num[i]*findRound(num, i); //面积=高*宽
        }
        findMax(area, num.length);
    }

    public static void findMax(int[] num, int length){ //找出数组最大数,返回值
        int max = num[0];
        for(int i=1; i<length; i++){
            max = max>num[i]? max:num[i];
        }
        System.out.println(max);
    }
    public static int findRound(int[] num, int i){ //找出包含num[i]的矩形的最长宽
        int l=i, r=i;
        if(i != 0){ //考虑边界情况,左边界则直接向右找
            for(int j=i-1; j>=0; j--){ //注意这里 j可以等于 0
                l = num[j]>=num[i]? j:l;
                if(num[j]<num[i]){
                    break;
                }
            }
        }
        if(i != (num.length-1)){ //考虑边界情况,右边界则直接向左找
            for(int j=i+1; j<num.length; j++){
                r = num[j]>=num[i]? j:r;
                if(num[j]<num[i]){
                    break;
                }
            }
        }
        return r-l+1;
    }
}

如果要放在官网真题检测上运行,务必去掉所有中文注释
最好先在一个没有在包内的Main.class文件检测一下,再粘贴过去
以上3题在官网满分通过,有更好方法欢迎留言探讨~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值