#8863: C語言 TLE 1s


xxs4129 (joker)

學校 : 正修科技大學
編號 : 40568
來源 : [220.143.167.67]
最後登入時間 :
2015-08-13 00:38:43
a013. 羅馬數字 -- NPSC 模擬試題 | From: [122.254.14.84] | 發表日期 : 2014-06-09 21:02

以下是我的寫法:

#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)

學校 : 國立嘉義高級中學
編號 : 35917
來源 : [140.135.11.171]
最後登入時間 :
2020-08-20 18:17:42
a013. 羅馬數字 -- NPSC 模擬試題 | From: [210.66.133.114] | 發表日期 : 2016-05-29 15:57

以下是我的寫法:

#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)

學校 : 國立嘉義高級中學
編號 : 35917
來源 : [140.135.11.171]
最後登入時間 :
2020-08-20 18:17:42
a013. 羅馬數字 -- NPSC 模擬試題 | From: [210.66.133.114] | 發表日期 : 2016-05-29 16:00

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

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

試試看


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


 
ZeroJudge Forum