赛码网的一道百度编程题

最近偶尔接触到这个赛码网,看了百度的一道编程题,因而尝试了一下,发现虽然每天写代码实现这个竟然花了我好长时间,仍然没有经过所有案例。目前给的经过率是100%git

题目以下:编程

小B最近对电子表格产生了浓厚的兴趣,她以为电子表格很神奇,功能远比她想象的强大。她正在研究的是单元格的坐标编号,她发现表格单元通常是按列编号的,第1列编号为A,第2列为B,以此类推,第26列为Z。以后是两位字符编号的,第27列编号为AA,第28列为AB,第52列编号为AZ。以后则是三位、四位、五位……字母编号的,规则相似。测试

 

表格单元所在的行则是按数值从1开始编号的,表格单元名称则是其列编号和行编号的组合,如单元格BB22表明的单元格为54列中第22行的单元格。编码

 

小B感兴趣的是,编号系统有时也能够采用RxCy的规则,其中x和y为数值,表示单元格位于第x行的有第y列。上述例子中的单元格采用这种编码体系时的名称为R22C54。设计

 

小B但愿快速实现两种表示之间的转换,请你帮忙设计程序将一种方式表示的坐标转换为另外一种方式。blog

 

输入

 

输入的第一行为一个正整数T,表示有T组测试数据(1<=T<=10^5)。随后的T行中,每行为一组测试数据,为一种形式表示的单元格坐标。保证全部的坐标都是正确的,且全部行列坐标值均不超过10^6。内存

 

样例输入

 

2get

R23C55input

BC23string

 

 

输出

 

对每组测试数据,单独输出一行,为单元格坐标的另外一种表示形式。

 

样例输出

 

BC23

R23C55

 

 

时间限制

C/C++语言:1000MS

其余语言:3000MS

内存限制

C/C++语言:65536KB

其余语言:589824KB

 

代码以下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define STR_LENGTH 32
char Alph26[26+1]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

void init(char *instr,const int length){ memset(instr,'\0',length); }
void deal(char *instr);
void judge(const char * infile,const char *outfile);
void transAlph2Num(const char *instr,int outNum);
void transNum2Alph( int inNum,char *outAlph);
int isRCMode(const char *instr);
int findChr(const char *instr,const char c);
int squareBase26(const unsigned int square )
{
if( 0 == square )
return 1;
else
return 26*squareBase26(square-1);
}

char changeNumTo26Num(int inNum)
{
return Alph26[inNum-1];
}

int changeCharTo26Num(char inNum)
{
for(int i = 0 ; i < 26 ; i ++)
{
if( inNum == Alph26[i] )
return i+1;
}
return 0;
}

void rtrim(char *instr)
{
for( int i = strlen(instr); i > -1 ; i--)
{
if(instr[i] ==' ' || instr[i] =='\t' || instr[i] =='\n')
instr[i] = '\0';
}
}
void ltrim(char *instr)
{
for( int i = 0; instr[i] != '\0' && i < strlen(instr) ; i++)
{
if(instr[i] ==' ' || instr[i] =='\t' || instr[i] =='\n')
instr++;
}
}
void trim(char *instr){
ltrim(instr);
rtrim(instr);
}

int main()
{

char chooseType[2];
memset(chooseType,'\0',2);
//printf("pls input the mode,0-from the screen,1-from file:");
//scanf("%s",chooseType);
strcpy(chooseType,"0");
if( strcmp(chooseType,"0") != 0 && strcmp(chooseType,"1") != 0 )
{
printf("pls input 0 or 1!");
return 0;
}

if( strcmp(chooseType,"0") == 0 )
{
int size = 0;
//printf("%s","pls input the Num:");
scanf("%d",&size);
char instr[STR_LENGTH];
init(instr,STR_LENGTH);
while( size > 0)
{
init(instr,STR_LENGTH);
//printf("%s","pls input the cha:");
scanf("%s",instr);
deal(instr);
size-- ;
}
}

if( strcmp(chooseType,"1") == 0 )
{
char fileName[128];
memset(fileName,'\0',128);
strcpy(fileName,"D:\\Program Files\\VC++6.0完整绿色版\\MyProjects\\experice\\transRowMode\\test.txt");
char outfile[128];
memset(outfile,'\0',128);
strcpy(outfile,"D:\\Program Files\\VC++6.0完整绿色版\\MyProjects\\experice\\transRowMode\\output.txt");
judge(fileName,outfile);
}
return 0;
}

void deal(char* instr)
{
int rNum = 0;
int cNum = 0;
char crNum[STR_LENGTH];
char ccNum[STR_LENGTH];
init(crNum,STR_LENGTH);
init(ccNum,STR_LENGTH);
//printf("111111\n");
//printf("isRCMode==[%d]\n",isRCMode(instr));
if( isRCMode(instr) > 0 )
{
//printf("22222\n");
strncpy(crNum,instr+1,findChr(instr,'C') - 1);
strncpy(ccNum,instr+findChr(instr,'C')+1,strlen(instr) - findChr(instr,'C') - 1 );
cNum = atoi( ccNum );
//cNum = atoi( ccNum );
//printf("crNum==[%s]ccNum==[%s]\n",crNum,ccNum);
char outcrNum[STR_LENGTH];
init(outcrNum,STR_LENGTH);
transNum2Alph( atoi(ccNum),outcrNum );
//printf("outcrNum=[%s]\n",outcrNum);
//printf("crNum==[%s]ccNum==[%s]\n",crNum,ccNum);
printf("%s\n",strcat(outcrNum,crNum) );
}else
{
//printf("sssss\n");
int i = 0;
for( ; !isdigit( instr[i] ) ; i++ );
strncpy(ccNum,instr,i);
strncpy(crNum,instr+i,strlen(instr) - i);

int sum = 0;
for(int j = 0 ; j < strlen(ccNum) ; j++ )
{
sum += changeCharTo26Num( ccNum[j] )*squareBase26( strlen(ccNum) - j - 1 );
}
printf("R%sC%d\n",crNum,sum);
}

}

void dealForjudge(const char *instr,char *outstr)
{
int rNum = 0;
int cNum = 0;
char crNum[STR_LENGTH];
char ccNum[STR_LENGTH];
init(crNum,STR_LENGTH);
init(ccNum,STR_LENGTH);
//printf("111111\n");
//printf("isRCMode==[%d]\n",isRCMode(instr));
if( isRCMode(instr) > 0 )
{
//printf("22222\n");
strncpy(crNum,instr+1,findChr(instr,'C') - 1);
strncpy(ccNum,instr+findChr(instr,'C')+1,strlen(instr) - findChr(instr,'C') - 1 );
cNum = atoi( ccNum );
//cNum = atoi( ccNum );
//printf("crNum==[%s]ccNum==[%s]\n",crNum,ccNum);
char outcrNum[STR_LENGTH];
init(outcrNum,STR_LENGTH);
transNum2Alph( atoi(ccNum),outcrNum );
//printf("crNum==[%s]ccNum==[%s]\n",crNum,ccNum);
sprintf(outstr,"%s",strcat(outcrNum,crNum) );
}else
{
//printf("sssss\n");
int i = 0;
for( ; !isdigit( instr[i] ) ; i++ );
strncpy(ccNum,instr,i);
strncpy(crNum,instr+i,strlen(instr) - i);

int sum = 0;
for(int j = 0 ; j < strlen(ccNum) ; j++ )
{
sum += changeCharTo26Num( ccNum[j] )*squareBase26( strlen(ccNum) - j - 1 );
}
//printf("R%sC%d\n",crNum,sum);
sprintf(outstr,"R%sC%d",crNum,sum);
}
}

void judge(const char * infile,const char *outfile)
{
FILE *fp = fopen(infile,"r");
if( NULL == fp )
{
printf("open file %s err!",infile);
}
char instr[32];
memset(instr,'\0',32);

char outstr[32];
memset(outstr,'\0',32);

char otherstr[32];
memset(otherstr,'\0',32);

FILE *ofp = fopen(outfile,"w+");
if( NULL == ofp )
{
printf("open file %s err!",outfile);
}

while( !feof(fp) )
{
memset(instr,'\0',32);
memset(outstr,'\0',32);
memset(otherstr,'\0',32);

fgets(instr,32,fp);
dealForjudge(instr,outstr);

dealForjudge(outstr,otherstr);
trim(instr);
trim(otherstr);

if( 0 != strncmp(instr,otherstr,strlen(instr)))
{
fprintf(ofp,"the err line: %s ,our output is : %s |strlen(instr)==[%d]strlen(otherstr)==[%d]\n",
instr,otherstr,strlen(instr),strlen(otherstr));
//fprintf(ofp,"the err line: %s ,our output is : %s \n",instr,otherstr);
}

}
fclose(fp);
fclose(ofp);
}
int findChr(const char *instr,const char c)
{
for( int i = 0 ; i < strlen(instr) ; i++)
{
if( instr[i] == c )
return i;
}
return -1;
}

int isRCMode(const char *instr )
{

if(strlen(instr) < 4)
{
return -1;
}

if( -1 == findChr(instr,'R') || -1 == findChr(instr,'C') )
return -1;

if( findChr(instr,'R') < ( findChr(instr,'C') - 1 ) )
{
char tmp[STR_LENGTH];
init(tmp,STR_LENGTH);
strncpy( tmp, instr + findChr(instr,'R') + 1, findChr(instr,'C') - 1 - findChr(instr,'R'));
if(isdigit(tmp[0]))
return 1;
else
return -1;
}

return -1;
}

void transNum2Alph( int inNum,char *outAlph)
{
int value = 0;
int left = 0;
int Num = inNum;

char tmp[STR_LENGTH];
init(tmp,STR_LENGTH);

//printf("Num==[%d]\n",Num);
while( Num / 26 != 0 )
{
value = Num / 26;
left = Num % 26;

if( left == 0 && value > 0 )
{
value = Num / 26 -1 ;
left = 26;
}
Num = value;

//printf("value==[%d]\n",value);
//printf("left==[%d]\n",left);

outAlph[0] = changeNumTo26Num( left );
outAlph[1] = '\0';
//printf("outAlph==[%s]\n",outAlph);
strcat(outAlph,tmp);
init(tmp,STR_LENGTH);
strcat(tmp,outAlph);
//printf("tmp==[%s]\n",tmp);
}

//printf("outAlph==[%s]\n",outAlph);
//printf("value==[%d]\n",value);
//printf("outAlph==[%s]\n",outAlph);
init(tmp,STR_LENGTH);
sprintf( tmp,"%c", changeNumTo26Num( Num ));
//printf("tmp==[%s]\n",tmp);
strcat(tmp ,outAlph);
init(outAlph,strlen(outAlph));
strcpy(outAlph,tmp);

}


/*examples
203
R621C406
ABD815
R3C24
R634C162
R695C621
R875C898
AHG626
AFE664
R95C969
R21C933
R629C648
R253C417
WQ20
AGA989
XO484
R912C396
R292C168
PI999
TR254
PH609
R207C905
R762C995
LL946
R292C805
R174C206
NY237
R345C125
R657C212
AEY185
BB81
HG448
NB654
VA829
NH784
R2C279
AR66
R555C813
R239C905
YQ299
R664C480
IU325
R691C157
R39C597
AF614
OT619
R861C285
UH114
R128C356
EU796
R875C881
R905C18
WX612
R320C311
R230C827
BH855
R228C494
R537C643
ABR841
R338C5
R795
AUHS663150
R65114C109610
R785221C773428
R478068C688017
AZWJX345190
CGLK572081
AUWX722691
R436062C160539
ANSZX739165
PGLD823102
AZTZF372005
R155046C61783
AVWPU406730
AFML164745
DQEV495443
AKHJE366539
R816313C186548
HVVG394183
R82084C546898
R801856C711332
R826371C762193
R608716C922692
R545887C36951
ATHOJ619110
YYOO770465
R584538C939133
BAOHW622629
R589421C600013
R896034C434965
AEHHM625289
ABFFL986675
OJZS920917
R435462C560150
R90907C362361
R510348C863563
BWIU877317
AWSLG539663
ASAHN375938
R867135C468467
ASRCB388295
R202894C726503
AVRPW459358
AJCTH449508
AUCPE787779
R154368C280330
R615083C833229
HPPP311906
R271010C110354
BBAHW713630
AMCRI73240
R840943C383813
R238746C184596
CULV667475
ABBHZ594373
KQHL758277
LZCW949062
AXRIX334545
R636264C827238
AWEIF151513
R913882C830137
R312434C526527
R251173C583251
BASAD289728
LHVY662516
R617396C384412
DORJ454803
MXKW144373
BAYDS344415
R112786C988680
R970780C62477
ARFCF764869
R298181C983393
BLYZ384317
ACKCC56705
R505731C510196
TJXN731696
R323524C817141
R833557C62449
R506036C882030
QLFA596958
HNHC16359
BCVJP801569
R17361C45995
BAHRG242433
BCQXA924209
R784829C587867
AKFCQ27038
BGIZ194059
R325691C842191
TZGY824542
CKFE256602
AQJLB525239
R324798C646867
AJMXN414860
R325149C872399
R87892C181622
R968034C147299
AJGNY63177
BAFIL801998
R381450C105115
UMVK790013
BSTM913958
APXRD744525
TCHI997641
ARVJO762601
R776980C68403
R720210C842320
ARXNC648195
R171339C3473
BDWFS999998
R999906C999905
BDWFW999949
R999982C999969
R999975C999938
BDWES999947
R999954C999992
R999900C999940
R999972C999916
R1000000C999954
R999907C999972
R999986C999991
R999901C999997
BDWDO999917
R999964C999998
R1000000C999984
R999989C999965
R999922C999931
BDWDX999943
R999969C999993
BDWFY999959
R999919C999947
BDWFV999951
R999945C999907
R999920C999930
BDWFF999925
BDWDN999936
BDWEI999955
R999954C999943
BDWFZ999911
R999958C999945
R999994C999993
BDWFV999907
BDWFO9999

您的输出:OP621R815C732X3FF634WW695AHN875R626C891R664C837AKG95AIW21XX629PA253R20C615R989C859R484C639OF912FL292R999C425R254C538R609C424AHU207ALG762R946C324ADY292GX174R237C389DU345HD657R185C831R81C54R448C215R654C366R829C573R784C372JS2R66C44AEG555AHU239R299C667RL664R325C255FA691VY39R614C32R619C410JY861R114C554MR128R796C151AGW875R905R612C622KY320AEU230R855C60S228XS537R841C746E338R795C18R663150C31999FFTCT65114ARFCFFCF785221AMETECETE478068R345190C929784R572081C57783R722691C32394ICOLO436062R739165C716584R823102C286264R372005C928154CMGJG155046R406730C859633R164745C21982R495443C81948R366539C655985JOXXX816313R394183C156059AENNCNN82084ANXFXLXFX801856AQCMCICMC826371BDXDLDXD608716BBEQE545887R619110C814304R770465C456705BAMFMKMFM584538R622629C941899AHKOKCKOK589421XSKKK896034R625289C550485R986675C496352R920917C271095AEFPFVFPF435462TPYY90907AWYKYCYKY510348R877317C50955R539663C874387R375938C791818AYYYPYYY867135R388295C803168AOKRKHKRK202894R459358C856255R449508C635292R787779C828521OXXQX154368AUGOGJGOG615083R311906C151856FGJFJ271010R713630C950011R73240C687969UUATA840943JMVAV238746R667475C67258R594373C493714R758277C205048R949062C228589R334545C891226AUVRVAVRV636264R151513C864844AUIIFII913882ACAWAXAWA312434AGSTSDSTS251173R289728C944402R662516C216917UVBQB617396R454803C80922R144373C245021R344415C948551BDDNDFDND112786CNYJY970780R764869C777484BCURUXURU298181R384317C43940R56705C517221ACXRXXRX505731R731696C358918ATMTMLMTM323524CNWIW833557AXFTFDFTF506036R596958C307061R16359C150283R801569C981828BPAAA17361R242433C937411R924209C978797AGGPGKGPG784829R27038C654463R194059C40144AUYUYWYUY325691R824542C369303R256602C60325R525239C762842AJMWMTMWM324798R414860C642162AWUMUPUMU325149JHLQL87892HIIWI968034R63177C637857R801998C935830EYWLW381450R790013C378467R913958C48529R744525C754888R997641C353765R762601C788491CWWDW776980AUXXXXX720210R648195C789935ECO171339R999998C999979BDWCWWWCW999906R999949C999983BDIFIWIFI999982BDDEDWDED999975R999947C999953BDFGFWFGF999954BDFEFWFEF999900BDHDHWHDH999972BDTETWTET1000000BDLFLWLFL999907BDEGEWEGE999986BDKGKWKGK999901R999917C999923BDLGLWLGL999964BDXFXWXFX1000000BDEFEWEFE999989BDWDWWWDW999922R999943C999932BDGGGWGGG999969R999959C999985BDMEMWMEM999919R999951C999982BDYCYWYCY999945BDVDVWVDV999920R999925C999966R999936C999922R999955C999943BDIEIWIEI999954R999911C999986BDKEKWKEK999958BDGGGWGGG999994R999907C999982R9999C999975*/

相关文章
相关标签/搜索