蓝桥杯 历届试题 Excel地址 java

Prev41 历届试题 Excel地址

题目如下:
image-20201222173846258

这道题目其实让我挺难忘的,因为我在参加第十届的时候就碰到了这个题,当时是道填空题。庆幸的是参加比赛前做了这道题目

没啥好说的,这题其实让人很有用进制做的想法,但这个又不能当成26进制来写,有些点说不通的,所以我就还是暴力模拟了

代码和注释如下:

import java.util.Scanner;

/**
 * @Description: 历届试题 Excel地址
 * @ClassName: Prev41
 * @author: fan.yang
 * @date: 2020/12/22 09:43
 */
public class Prev41 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = 1;
        int m = 0;
        int a[] = new int[7];
        //求得A AA AAA AAAA AAAAA AAAAAA... 的数值
        //这里说明一下之所以求A AA... 是为了确定输入的值的大概的范围
        //比如例子2054就是介于AAA和AAAA之间 这样我就知道2054是由3个字符构成
        //循环7次差不多了 AAAAAAA等于321272407 再下去int就爆了
        for(int i = 0;i < 7;i++){
            a[i] = k;
            if(i != 0){
                a[i] += a[i - 1];
            }
            //到循环结束就能得到
            if(n / a[i] > 0){
                m = i;
            }
            k *= 26;
        }
        //根据求得的m进行计算
        //比如n = 2054时 当我们知道他是3位的时 那其构成就是 26的2次 * X2 + 26的1次 * X1 + 26的0次 * X0 (很像进制)
        //X的值就由A B C ... Z来代替 最终得到 X2 = B ,X1 = Z ,X0 = Z  合起来就是BZZ
        for(int i = m;i >= 0;i--){
            //得到X的值
            int pow = (int)Math.pow(26, i);
            int x = n / pow;
            //这里注意一下X的值可能有问题
            //比如2054 / 26的2次 得到 3
            //但如果x的值取3 那么后面两位只需要构建 2054 - 26 * 26 * 3 = 26 那么后两位就是A0 或者 0Z 这显然是不行的
            //后面两位一定要大于等于AA  因为A代表1 没有存在0的情况 所以AA是后两位最小的情况 只能大于等于AA
            // 所以我们要减1 将这个多出来的值留个后两位来构成
            if(i != 0 && n - x * pow < a[i - 1]){
                x--;
            }
            System.out.print((char)('A' + (x - 1)));
            //减去当前循环构建的
            n -= x * pow;
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值