#30261: 測試時沒問題,但到送出解答時都會同一個錯誤答案,找了很久也找不到,希望能指點一下!


zqwe1230@gmail.com (LCY)

學校 : 不指定學校
編號 : 173993
來源 : [140.118.144.163]
最後登入時間 :
2022-09-20 14:37:29
a013. 羅馬數字 -- NPSC 模擬試題 | From: [223.140.25.20] | 發表日期 : 2022-05-13 19:34

因為我是把題目分開階段來寫,最後在合併到一起,各別用很簡單的邏輯想,寫得有點亂,要是很難看懂很抱歉QQ

我自己一筆一筆資料測試都正常,但送出解答時就都是同一個錯誤結果,看了很久都看不到問題

 

每次錯誤都是這個↓

#0: 100% WA (line:8)

您的答案為: V
正確答案為: XVIII


我看不太懂#0、100%、line:8的意思,希望可以跟我說明一下是甚麼含意,感謝!


#include <iostream>
#include <string>
#include <cstring>
using namespace std;

int function(string str_1){                                //羅馬數字轉阿拉伯數字
    
    int i=0;
    int a=0;
    int length=str_1.length();
    
        while(i<length){
        
        
        switch(str_1[i]){
            case 'M':                                //1000
                a= a+1000;
                i++;
                break;
            case 'D':                                //500
                a= a+500;
                i++;
                break;
            case 'C':
                if(str_1[i+1]=='M'){                //900
                    a= a+900;
                    i=i+2;
                    break;
                }
                else if(str_1[i+1]=='D'){            //400
                    a= a+400;
                    i=i+2;
                    break;
                }
                else {                                //100
                    a= a+100;
                    i++;
                    break;
                }
            case 'L':                                //50
                a= a+50;
                i++;
                break;
            case 'X':
                 if(str_1[i+1]=='C'){                //90
                    a= a+90;
                    i=i+2;
                    break;
                }
                else if(str_1[i+1]=='L'){            //40
                    a= a+40;    
                    i=i+2;
                    break;
                }
                else {                                //10
                    a= a+10;
                    i++;
                    break;
                }
            case 'V':                                //5
                a= a+5;
                i++;
                break;
            case 'I':
                 if(str_1[i+1]=='X'){                //9
                    a= a+9;
                    i=i+2;
                    break;
                }
                else if(str_1[i+1]=='V'){            //4
                    a= a+4;
                    i=i+2;
                    break;
                }
                else {                                //1
                    a= a+1;
                    i++;
                    break;
                }
            
        }
    
    }
    
    return a;
}


int function_2(int a){                                    //轉換成羅馬數字
    //設變數    
    
    int I=0;        //1
    int V=0;        //5
    int X=0;        //10
    int L=0;        //50
    int C=0;        //100
    int D=0;        //500
    int M=0;        //1000
    
    int IV=0;        //4
    int IX=0;        //9
    int XL=0;        //40
    int XC=0;        //90
    int CD=0;        //400
    int CM=0;        //900 
    

//運算

    if(a==0){                //判斷是否為0
        cout<<"ZERO"<<endl;return 0;
    }

    I=a%10;            //1(個位數) 
    X=a/10%10;        //10(十位數) 
    C=a/100%10;        //100(百位數) 
    M=a/1000%10;    //1000(千位數) 
    
//    cout<<M<<" "<<C<<" "<<X<<" "<<I<<endl<<endl;        //驗算,顯示千、百、十、個位 
    
    if(I==9){                //判斷是否為9
        I-=9;IX++;
    }
    if(I==4){                //判斷是否為4 
        I-=4;IV++;
    }
    if(X==9){                //判斷是否為90
        X-=9;XC++;
    }
    if(X==4){                //判斷是否為40 
        X-=4;XL++;
    }
    if(C==9){                //判斷是否為900 
        C-=9;CM++;
    }
    if(C==4){                //判斷是否為400 
        C-=4;CD++;
    }
    
    if(I/5){                //判斷是否為5
        I-=5;V++;
    }        
    if(X/5){                //判斷是否為50
        X-=5;L++;
    }
    if(C/5){                //判斷是否為500
        C-=5;D++;
    }

 


//輸出    

    for( M; M>0; M--){        //1000
    cout<<"M";
    }
    for( CM; CM>0; CM--){    //900
    cout<<"CM";
    }
    for( D; D>0; D--){        //500
    cout<<"D";
    }
    for( CD; CD>0; CD--){    //400
    cout<<"CD";
    }
    for( C; C>0; C--){        //100
    cout<<"C";
    }
    for( XC; XC>0; XC--){    //90
    cout<<"XC";
    }
    for( L; L>0; L--){        //50
    cout<<"L";
    }
    for( XL; XL>0; XL--){    //40
    cout<<"XL";
    }
    for( X; X>0; X--){        //10
    cout<<"X";
    }
    for( IX; IX>0; IX--){    //9
    cout<<"IX";
    }
    for( V; V>0; V--){        //5
    cout<<"V";
    }
    for( IV; IV>0; IV--){    //4
    cout<<"IV";
    }
    for( I; I>0; I--){        //1
    cout<<"I";
    }
    
    
    cout<<endl;
    return 0;
    
}

 

 

int main(){
    
    string str_1,str_2;
    int a=0,b=0;
    
    while(cin>>str_1 && str_1!="#" && cin>>str_2){
    
        a= function(str_1);
        b= function(str_2);
    
        a= a-b;
        function_2(a);
    
    }
    
    
return 0;

    
}

 
#30264: Re: 測試時沒問題,但到送出解答時都會同一個錯誤答案,找了很久也找不到,希望能指點一下!


cges30901 (cges30901)

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

1.
我看不太懂#0、100%、line:8的意思,希望可以跟我說明一下是甚麼含意,感謝!

2.
        a= a-b;

 

  1. #0代表測資點的編號(這題只有一個測資點),100%是這個測資點的配分(要全對才有AC,所以我覺得這個不太重要),line:8代表你輸出的第8行有錯(不代表這一行後面沒錯)
  2. 第二個數字可能大於第一個數字,題目有說要絕對值
 
#30266: Re: 測試時沒問題,但到送出解答時都會同一個錯誤答案,找了很久也找不到,希望能指點一下!


zqwe1230@gmail.com (LCY)

學校 : 不指定學校
編號 : 173993
來源 : [140.118.144.163]
最後登入時間 :
2022-09-20 14:37:29
a013. 羅馬數字 -- NPSC 模擬試題 | From: [223.140.132.157] | 發表日期 : 2022-05-13 23:29

line:8代表你輸出的第8行有錯

意思是代表最後輸出了很多行,我在輸出的第8行就錯了(雖然根本不知道第8行的測資)

 

原來如此,是這個問題!
非常感謝你!!

相信明天改完應該就沒問題了~

 

 
ZeroJudge Forum