2019蓝桥杯真题年号字串(填空题) C语言/C++

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小明用字母 A 对应数字 11,B 对应 2,以此类推,用 Z 对应 26。对于 27 以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对应 28,AZ 对应 52,LQ 对应 329。

请问2019 对应的字符串是什么?

运行限制
最大运行时间:1s
最大运行内存: 128M
所需变量

int sum[5];//代表一位到底是几

int control;//代表一共有多少位才可以代表这个数

int c;//为了将这个填空题做成程序题,令的一个变量,在该填空题中,赋初值为2019

我们首先要确定如果每一位上是5,那么应该就是E(大写),如果是3那么就是C(大写)
因此我们定义了以下的方法:

int fangfa(int a){
  char t = a+64;
  printf("%c",t);
}

然后我们要确定一共要多少位才能组成该数所以定义了以下方法:

 while(true){
    if(pow(26,control)>c){
      break;
    }
    control++;
  }

思路:我们首先得到索要判断的数是多少(即c),在该题中我们直接赋值2019,获得这个数字之后,我们在判断需要多少位字母才能表示他,所以就有了上面那个方法的代码,得到多少位表示他后,然后我们一个一个去测试,只有当上面的位比这个还需要表示的数要大的时候,我们就将他变成下一位表示!(这里比较不太好理解,多读几遍,哈哈哈,如果最后实在不是很懂,可以直接私信我!)
该算法本人认为比较优,如果有更好的想法,欢迎q我!
代码如下(编译器是dev,语言是C语言):

#include
#include
#include
int fangfa(int a){
  char t = a+64;
  printf("%c",t);
}
int main()
{
  int sum[5] = {0},control = 0;
  int c = 2019;
  while(true){
    if(pow(26,control)>c){
      break;
    }
    control++;
  }
  control--;
  for(int i = control;i>=0;i--){
    while(true){
      if(c>=pow(26,i)){
        c -= pow(26,i);
        sum[i]++; 
      }
      else{
        break;
      }
    }
  }
  for(int i = 0;i<=control;i++){
    if(sum[i] == 0){
      sum[i] = 26;
      sum[i+1] -= 1;
    }
  }
  for(int i = control;i>=0;i--){
    fangfa(sum[i]);
  }
  printf("\n");
  return 0;
}

2019蓝桥杯真题年号字串(填空题) C语言/C++_第1张图片

你可能感兴趣的:(蓝桥杯真题,蓝桥杯,c++,c语言)