#30151: 自己測了都對但卻是WA,想請各位幫我看看哪裡寫錯qwq


rickychouw@gmail.com (秋夜之森)

學校 : 臺北市立成功高級中學
編號 : 89767
來源 : [124.6.28.160]
最後登入時間 :
2022-05-07 14:59:52
a013. 羅馬數字 -- NPSC 模擬試題 | From: [140.113.92.163] | 發表日期 : 2022-05-01 19:43

#include <bits/stdc++.h>
using namespace std;

//char to int
int ci(char n)
{
    switch(n)
    {
        case 'I':    return 1;    break;
        case 'V':    return 5;    break;
        case 'X':    return 10;    break;
        case 'L':    return 50;    break;
        case 'C':    return 100;    break;
        case 'D':    return 500;    break;
        case 'M':    return 1000;    break;
        default:                break;
    }
}

//int to char
char ic(int n)
{
    switch(n)
    {
        case 6:        return 'I';    break;
        case 5:        return 'V';    break;
        case 4:        return 'X';    break;
        case 3:        return 'L';    break;
        case 2:        return 'C';    break;
        case 1:        return 'D';    break;
        case 0:        return 'M';    break;
        default:                break;
    }
}

//減法取代 
string subtraction(int n)
{
    switch(n)
    {
        case 5:    return "IV";    break;
        case 4:    return "IX";    break;
        case 3:    return "XL";    break;
        case 2:    return "XC";    break;
        case 1:    return "CD";    break;
        case 0:    return "CM";    break;
        default:                break;
    }
}

//羅馬表示 
void roma(int n)
{
    int a[7] = {};
    int b[6] = {};
    if(n == 0){
        cout << "ZERO" << endl;
        return;
    }
    while(n > 0){
        if(n >= 1000)
        {
            a[0]++;
            n -= 1000;
        }
        else if(n >= 500)
        {
            a[1]++;
            n -= 500;
        }
        else if(n >= 100)
        {
            a[2]++;
            n -= 100;
        }
        else if(n >= 50)
        {
            a[3]++;
            n -= 50;
        }
        else if(n >= 10)
        {
            a[4]++;
            n -= 10;
        }
        else if(n >= 5)
        {
            a[5]++;
            n -= 5;
        }
        else if(n >= 1)
        {
            a[6]++;
            n -= 1;
        }
    }
    for(int i = 6 ; i >= 2 ; i--)
    {
        if(i % 2 == 0)
        {
            //當同一個 
            if(a[i] > 3)
            {
                if(a[i-1] > 0)
                {
                    a[i] = 0;
                    a[i-1]--;
                    b[i-2]++;
                }
                else
                {
                    a[i] = 0;
                    b[i-1]++;
                }
            }
        }    
    }
    for(int i = 0 ; i < 7 ; i++)
    {
        for(int j = 1 ; j <= a[i] ; j++)
        {
            cout << ic(i);
        }
        if(i < 6)
        {
            for(int k = 1 ; k <= b[i] ; k++)
            {
                cout << subtraction(i);
            }    
        }    
    }
    return;
}

int main()
{
    
    string a; //用字串來抓羅馬數字 
    char n;
    int num_1 = 0; //前面的數字 
    int num_2 = 0; //後面的數字 
    bool now = false; //表示現在加總的是前面的數字還是後面的數字 
    while(cin >> a)
    {
        for(int i = 1 ; i <= a.length() ; i++)
        {
            n = a[i-1]; //把每個字母拆開來看 
            
            //當輸入#就結束 
            if(n == '#')
                return 0;
            //根據now來把羅馬數字的值加到前或後 
            if(now == false)
            {
                num_1 += ci(n);
            }
            else
            {
                num_2 += ci(n);
            }    
        }
        
        //當後面的數字加好後輸出以羅馬數字表示的兩者差 
        if(now == true)
        {
            roma((int)abs(num_1 - num_2)); //兩者差的絕對值 
            cout << endl;
            num_1 = 0; //初始化 
            num_2 = 0; //初始化 
            now = false; //初始化 
            continue;
        }
        now = true; //切換到後面的數字總和(num_2) 
    }
    
    return 0;
}

 
#30154: Re: 自己測了都對但卻是WA,想請各位幫我看看哪裡寫錯qwq


cges30901 (cges30901)

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


            n = a[i-1]; //把每個字母拆開來看 
            
            //當輸入#就結束 
            if(n == '#')
                return 0;
            //根據now來把羅馬數字的值加到前或後 
            if(now == false)
            {
                num_1 += ci(n);
            }
            else
            {
                num_2 += ci(n);
            }    
   


你輸入時沒有考慮到減法規則,例如IV是5-1=4,可是你的程式會變成6

 
#30155: Re: 自己測了都對但卻是WA,想請各位幫我看看哪裡寫錯qwq


cges30901 (cges30901)

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


            n = a[i-1]; //把每個字母拆開來看 
            
            //當輸入#就結束 
            if(n == '#')
                return 0;
            //根據now來把羅馬數字的值加到前或後 
            if(now == false)
            {
                num_1 += ci(n);
            }
            else
            {
                num_2 += ci(n);
            }    
   


你輸入時沒有考慮到減法規則,例如IV是5-1=4,可是你的程式會變成6

 
#30159: Re: 自己測了都對但卻是WA,想請各位幫我看看哪裡寫錯qwq


rickychouw@gmail.com (秋夜之森)

學校 : 臺北市立成功高級中學
編號 : 89767
來源 : [124.6.28.160]
最後登入時間 :
2022-05-07 14:59:52
a013. 羅馬數字 -- NPSC 模擬試題 | From: [140.113.92.163] | 發表日期 : 2022-05-01 23:13


            n = a[i-1]; //把每個字母拆開來看 
            
            //當輸入#就結束 
            if(n == '#')
                return 0;
            //根據now來把羅馬數字的值加到前或後 
            if(now == false)
            {
                num_1 += ci(n);
            }
            else
            {
                num_2 += ci(n);
            }    
   


你輸入時沒有考慮到減法規則,例如IV是5-1=4,可是你的程式會變成6

喔喔喔!!!感謝你,我自己都沒發現到XD

 
ZeroJudge Forum