賽碼網的一道百度編程題

最近偶爾接觸到這個賽碼網,看了百度的一道編程題,因而嘗試了一下,發現雖然每天寫代碼實現這個竟然花了我好長時間,仍然沒有經過所有案例。目前給的經過率是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*/

相關文章
相關標籤/搜索