第二次打个人赛

这次居然打秃了,被A题卡的体无完肤.....结果之后转D题心里挂着A题...D题也被卡。

然后第二天不甘心,翘课来机房敲昨天的题,结果两题完全重新敲,都是10分钟左右敲完代码,A题1掉

然后D题还真有点说头...用了一上午的时间去找到哪错了,领悟到了不少东西

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
int check(string s){
for (int i=;i<s.size();i++){
if (s[i]=='C') return ;
}
return ;
}
int work1(string s){
int r,c;
sscanf(s.c_str(),"R%dC%d",&r,&c);
int a[];
memset(a,,sizeof(a));
int top=;
while (c){
a[top++]=c%;
c/=;
if (a[top-]==) a[top-]=,c--;
}
for (int i=top-;i>=;i--)
putchar(a[i]+'A'-);
cout<<r<<endl;
}
int mypow(int t){
int ans=;
for (int i=;i<=t;i++)
ans*=;
return ans;
}
int work2(string s){
int a[];
memset(a,,sizeof(a));
int top=;
while (s[top]>='A'&&s[top]<='Z') a[top]=s[top],top++;
int r,c=;
int t=;
for (int i=top-;i>=;i--)
c+=(a[i]-'A'+)*mypow(t++);
char st[]={'\0'};
s.copy(st,s.size()-top,top);
//st[s.size()]='\0';
sscanf(st,"%d",&r);
cout<<"R"<<r<<"C"<<c<<endl;
}
int main()
{
int testcase;
cin>>testcase;
while (testcase--){
string s;
cin>>s;
if (s[]=='R'&&s[]>=''&&s[]<=''&&check(s)) work1(s);
else work2(s);
}
}

首先现学现卖学会了怎么用sscanf()

然后即使是字符数组,也一定要记得初始化

最后也是最重要的一点,思路不清晰千万千万不要下手,否则敲到一半才发现是错的

05-07 15:29