#8863: C語言 TLE 1s


xxs4129 (joker)


以下是我的寫法:

#include<stdio.h>

#include<string.h>

int pp(char []);

int main(){

char c1[15],c2[15];

register int k,k1,k2;

while(scanf("%s %s",c1,c2)){

k1=pp(c1);

k2=pp(c2);

k=k1-k2;

if(k<0)

k=0-k;

if(k==0)

printf("ZERO\n");

while(k>0){

if(k>=1000){

printf("M");

k-=1000;

}

else if(k>=900){

printf("CM");

k-=900;

}

else if(k>=500){

printf("D");

k-=500;

}

else if(k>=400){

printf("CD");

k-=400;

}

else if(k>=100){

printf("C");

k-=100;

}

else if(k>=90){

printf("XC");

k-=90;

}

else if(k>=50){

printf("L");

k-=50;

}

else if(k>=40){

printf("XL");

k-=40;

}

else if(k>=10){

printf("X");

k-=10;

}

else if(k>=9){

printf("IX");

k-=9;

}

else if(k>=5){

printf("V");

k-=5;

}

else if(k>=4){

printf("IV");

k-=4;

}

else if(k>=1){

printf("I");

k-=1;

}

}

printf("\n");

}

return 0;

}

int pp(char i[]){

int m=0,p,a=strlen(i);

for(p=0;p<a;p++){

switch(i[p]){

case'I':

m++;

break;

case'V':

m+=5;

break;

case'X':

m+=10;

break;

case'L':

m+=50;

break;

case'C':

m+=100;

break;

case'D':

m+=500;

break;

case'M':

m+=1000;

break; 

}

}

return m;

}

結果逾時1s,想問有沒有大大能給個建議 

#10964: Re:C語言 TLE 1s


zen870124 (zen87124)


以下是我的寫法:

#include

#include

int pp(char []);

int main(){

char c1[15],c2[15];

register int k,k1,k2;

while(scanf("%s %s",c1,c2)){

k1=pp(c1);

k2=pp(c2);

k=k1-k2;

if(k<0)

k=0-k;

if(k==0)

printf("ZERO\n");

while(k>0){

if(k>=1000){

printf("M");

k-=1000;

}

else if(k>=900){

printf("CM");

k-=900;

}

else if(k>=500){

printf("D");

k-=500;

}

else if(k>=400){

printf("CD");

k-=400;

}

else if(k>=100){

printf("C");

k-=100;

}

else if(k>=90){

printf("XC");

k-=90;

}

else if(k>=50){

printf("L");

k-=50;

}

else if(k>=40){

printf("XL");

k-=40;

}

else if(k>=10){

printf("X");

k-=10;

}

else if(k>=9){

printf("IX");

k-=9;

}

else if(k>=5){

printf("V");

k-=5;

}

else if(k>=4){

printf("IV");

k-=4;

}

else if(k>=1){

printf("I");

k-=1;

}

}

printf("\n");

}

return 0;

}

int pp(char i[]){

int m=0,p,a=strlen(i);

for(p=0;p<a;p++){

switch(i[p]){

case'I':

m++;

break;

case'V':

m+=5;

break;

case'X':

m+=10;

break;

case'L':

m+=50;

break;

case'C':

m+=100;

break;

case'D':

m+=500;

break;

case'M':

m+=1000;

break; 

}

}

return m;

}

結果逾時1s,想問有沒有大大能給個建議

 

讀資料的地方換成
while(scanf("%s",c1)&&c1[]!='#')//最後一行是給一個 # 結束,拆開拿資料
{

scanf("%s,c2);//裡面加上
}

試試看


#10965: Re:C語言 TLE 1s


zen870124 (zen87124)


讀資料的地方換成
while(scanf("%s",c1)&&c1[]!='#')//最後一行是給一個 # 結束,拆開拿資料
{

scanf("%s,c2);//裡面加上
}

試試看


更正
while(scanf("%s",c1)&&c1[]!='#')
while(scanf("%s",c1)&&c1[0]!='#')