Barty的表格

32 篇文章 0 订阅
17 篇文章 0 订阅
 

【问题描述】

    Excel                                             A            B
          中的列号是使用大写字母标识的,第一列是 ,第二列是 ,然后依

                   26      Z                         AA~ZZ
    次标下去,第  列是 。之后列号变为两位从                                    以字典顺序标识

    (AA,AB,AC...AZ,BA,BB,BC....ZZ)。再之后列号变为三位大写字母

    AAA---ZZZ(AAA,AAB,AAC...AAZ,ABA...ZZZ),依次类推。

    Excel                               1             1       2       3
          中的行号是使用数字标识的,从 开始表示第 行,第 行,第 行……

    一直标下去。

    Barty手中有一份非常大的表格数据,他想得知某些单元格的内容,但是他

    不知道Excel中这些单元格的行号和列号分别是什么,于是请你编写程序来

    帮帮他。

                      excel.in
                       excel.in
【输入文件】文件名:eexxcceell..iinn

                      ,                           m                        n(n
    第一行两个正整数数据表格允许的最大行列数 和要查询的单元格数量

    <=100)。

    接下来n行,每行一条格式为“XNUMXNUM”的查询

    X                 ‘R’ ‘C’                 NUM
      是一个大写字母 或 ,表示行或列,                             为一个整数

    (0<=NUM<=10^9)。

                      excel.out
                       excel.out
【输出文件】文件名:eexxcceell..oouutt

    对每一条查询,所在单元格的行号和列号,用一个空格隔开

    若单元格不存在,输出-1

    每条查询占一行。

【样例输入】

    1003

    R23C26

    R94C27

    R59C102

【样例输出】

    23Z

    94AA

    -1

ac程序:

var a:array[0..10000] of longint;
m:int64;
s:string;
n,i,j,k,x,y,sum:longint;
procedure make;
var s0:char;
s1:string;
begin
 s0:=s[1]; delete(s,1,pos(' ',s));
 s1:=copy(s,1,pos(' ',s)-1);
 delete(s,1,pos(' ',s));
 if s0='R' then val(s1,x) else val(s1,y);

 s0:=s[1]; delete(s,1,pos(' ',s));
 s1:=s;
 {delete(s,1,pos(s,' '));}
 if s0='R' then val(s1,x) else val(s1,y);
end;
procedure main;
var k:longint;
begin
 fillchar(a,sizeof(a),0);
 a[0]:=1; a[1]:=y;
 while a[a[0]]>26 do
  begin
   inc(a[0]); a[a[0]]:=a[a[0]-1] div 26;
   a[a[0]-1]:=a[a[0]-1] mod 26;
   if a[a[0]-1]=0 then
    begin a[a[0]-1]:=26; a[a[0]]:=a[a[0]]-1; end;
  end;
  write(x,' '{,y});
 for k:=a[0] downto 1 do
  write(chr(ord('A')-1+a[k]));
 {write(' ');
 for k:=a[0] downto 1 do
  write(a[k],' ');}
 writeln;
end;
begin
 assign(input,'excel.in'); assign(output,'excel.out');
 reset(input); rewrite(output);
 readln(m,n);
 for i:=1 to n do
  begin
   readln(s);
   x:=0; y:=0;
   make;
   if (x>m) or (y>m) or (x=0) or (y=0) then writeln(-1)
   else main;
  end;
 close(input); close(output);
end.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值