#29259: 為什麼都卡在line 4


jay940822@gmail.com (哈密瓜)

學校 : 不指定學校
編號 : 181309
來源 : [118.168.2.19]
最後登入時間 :
2024-04-16 01:40:15
a013. 羅馬數字 -- NPSC 模擬試題 | From: [118.168.17.44] | 發表日期 : 2022-02-09 20:56

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

 

int main()

{

    char word[100][2][100];

    int stop=0;

    int length=-1;

    for(int i=0;i<100;i++){

        if(stop==1){

            break;

        }

        for(int j=0;j<2;j++){

            scanf("%s",word[i][j]);

            for(int k=0;k<10;k++){

                if(word[i][j][k]=='#'){

                    stop=1;

                    break;

                }

            }

            if(stop==1){

                break;

            }

        }

        length++;

    }

 

 

    int number[100][2][100];

    for(int i=0;i<length;i++){

        for(int j=0;j<2;j++){

            for(int k=0;k<strlen(word[i][j]);k++){

                if(word[i][j][k]=='I'){

                    number[i][j][k]=1;

                }

                if(word[i][j][k]=='V'){

                    number[i][j][k]=5;

                }

                if(word[i][j][k]=='X'){

                    number[i][j][k]=10;

                }

                if(word[i][j][k]=='L'){

                    number[i][j][k]=50;

                }

                if(word[i][j][k]=='C'){

                    number[i][j][k]=100;

                }

                if(word[i][j][k]=='D'){

                    number[i][j][k]=500;

                }

                if(word[i][j][k]=='M'){

                    number[i][j][k]=1000;

                }

 

            }

        }

    }

 

 

    int output[100];

    for(int i=0;i<length;i++){

        int temp[2];

        temp[0]=temp[1]=0;

        for(int j=0;j<2;j++){

            for(int k=0;k<strlen(word[i][j]);k++){

                if(number[i][j][k]>=number[i][j][k+1]&&k<strlen(word[i][j])-1){

                    temp[j]=temp[j]+number[i][j][k];

                }

                if(number[i][j][k]<number[i][j][k+1]&&k<strlen(word[i][j])-1){

                    temp[j]=temp[j]-number[i][j][k];

                }

                if(k==strlen(word[i][j])-1){

                    temp[j]=temp[j]+number[i][j][k];

                }

 

            }

        }

        if(temp[1]>temp[0]){

            int temp2;

            temp2=temp[0];

            temp[0]=temp[1];

            temp[1]=temp2;

        }

        output[i]=temp[0]-temp[1];

    }

 

 

    char a[100][100];

    int temp2;

    int output2[100];

    for(int i=0;i<length;i++){

        output2[i]=output[i];

    }

    for(int i=0;i<length;i++){

        temp2=0;

        while(output[i]>=1000){

            a[i][temp2]='M';

            output[i]=output[i]-1000;

            temp2++;

        }

        while(output[i]>=500){

            a[i][temp2]='D';

            output[i]=output[i]-500;

            temp2++;

        }

        while(output[i]>=100){

            a[i][temp2]='C';

            output[i]=output[i]-100;

            temp2++;

        }

        while(output[i]>=50){

            a[i][temp2]='L';

            output[i]=output[i]-50;

            temp2++;

        }

        while(output[i]>=10){

            a[i][temp2]='X';

            output[i]=output[i]-10;

            temp2++;

        }

        while(output[i]>=5){

            a[i][temp2]='V';

            output[i]=output[i]-5;

            temp2++;

        }

        while(output[i]>=1){

            a[i][temp2]='I';

            output[i]--;

            temp2++;

        }

    }

 

 

    int I,X,C;

    I=X=C=0;

    char temp[100];

    int k=0;

    for(int i=0;i<length;i++){

        temp[0]='\0';

        if(output2[i]==0){

            printf("ZERO\n");

        }

        else{

            for(int j=0;j<strlen(a[i]);j++){

                if(a[i][j]=='I'){

                    I++;

                }

                if(a[i][j]=='X'){

                    X++;

                }

                if(a[i][j]=='C'){

                    C++;

                }

            }

            k=0;

            if(I==4||X==4||C==4){

                for(int j=0;j<strlen(a[i]);j++){

                    temp[k]=a[i][j];

                    if(C==4&&a[i][j]=='C'){

                        k++;

                        temp[k]='D';

                        if(temp[k-2]=='D'){

                            temp[k-2]='C';

                            temp[k-1]='M';

                            temp[k]='\0';

                            k--;

                        }

                        j=j+3;

                    }

                    if(X==4&&a[i][j]=='X'){

                        k++;

                        temp[k]='L';

                        if(temp[k-2]=='L'){

                            temp[k-2]='X';

                            temp[k-1]='C';

                            temp[k]=='\0';

                            k--;

                        }

                        j=j+3;

                    }

                    if(I==4&&a[i][j]=='I'){

                        k++;

                        temp[k]='X';

                        if(temp[k-2]=='X'){

                            temp[k-2]='I';

                            temp[k-1]='X';

                            temp[k]=='\0';

                            k--;

                        }

                        j=j+3;

                    }

                    k++;

                }

                printf("%s\n",temp);

 

            }

            else{

                printf("%s\n",a[i]);

            }

        }

    }

    return 0;

}

 

 
#29261: Re:為什麼都卡在line 4


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a013. 羅馬數字 -- NPSC 模擬試題 | From: [39.8.33.77] | 發表日期 : 2022-02-09 22:24


    I=X=C=0;

    char temp[100];


 


你有些變數在不同筆測資之間沒有重設,會互相影響。你可以把這兩行移到下面的for迴圈裡面。

 
#29263: Re:為什麼都卡在line 4


jay940822@gmail.com (哈密瓜)

學校 : 不指定學校
編號 : 181309
來源 : [118.168.2.19]
最後登入時間 :
2024-04-16 01:40:15
a013. 羅馬數字 -- NPSC 模擬試題 | From: [118.168.17.44] | 發表日期 : 2022-02-09 23:32


    I=X=C=0;

    char temp[100];


 


你有些變數在不同筆測資之間沒有重設,會互相影響。你可以把這兩行移到下面的for迴圈裡面。


太感謝你了! 謝謝!

 

 
ZeroJudge Forum