Problem ID :b012. 羅馬數字

New Thread

User 這樣不能解這一題嗎?

ty104509 SendIMessage
fw

b012. 羅馬數字 | From: 1.167.51.115 | Post Date:2021-09-12 11:02:16.0

 

#include<iostream>

#include<math.h>

#include<iomanip>

#include <string>

using namespace std;

int main(int argc, const char * argv[])

{

    char a[100];

    int b[1000],c,d,e;

    cin>>a;

    c=strlen(a);

    e=0;

    for(d=0;d<strlen(a);d++)

    {

        if(a[d]=='I')

            b[d]=1;

        else if(a[d]=='V')

            b[d]=5;

        else if(a[d]=='X')

            b[d]=10;

        else if(a[d]=='L')

            b[d]=50;

        else if(a[d]=='C')

            b[d]=100;

        else if(a[d]=='D')

            b[d]=500;

        else if(a[d]=='M')

            b[d]=1000;

    }

    for(d=0;d<strlen(a);d+=2)

    {

        if(b[d]<b[d+1])

            e+=b[d+1]-b[d];

        else if(b[d]>=b[d+1])

            e+=b[d]+b[d+1];

    }

    if(strlen(a)%2==1)

        e+=b[strlen(a)-1];

    cout<<e;

    

    return 0;

}

 


文章類型: 一般 | Reply | Back
User Re:這樣不能解這一題嗎?

ya622188 SendIMessage
耶耶好愉快

b012. 羅馬數字 | From: 36.238.206.235 | Post Date:2021-09-13 08:15:47.0

 

#include

#include

#include

#include

using namespace std;

int main(int argc, const char * argv[])

{

    char a[100];

    int b[1000],c,d,e;

    cin>>a;

    c=strlen(a);

    e=0;

    for(d=0;d<strlen(a);d++)

    {

        if(a[d]=='I')

            b[d]=1;

        else if(a[d]=='V')

            b[d]=5;

        else if(a[d]=='X')

            b[d]=10;

        else if(a[d]=='L')

            b[d]=50;

        else if(a[d]=='C')

            b[d]=100;

        else if(a[d]=='D')

            b[d]=500;

        else if(a[d]=='M')

            b[d]=1000;

    }

    for(d=0;d<strlen(a);d+=2)

    {

        if(b[d]1])

            e+=b[d+1]-b[d];

        else if(b[d]>=b[d+1])

            e+=b[d]+b[d+1];

    }

    if(strlen(a)%2==1)

        e+=b[strlen(a)-1];

    cout<

    

    return 0;

}


你這樣有辦法run嗎?

檢查一下 c=strlen(a)這行

 

另外,c好像完全沒用到呢

 


文章類型: 一般 | Reply | Back
User Re:這樣不能解這一題嗎?

ya622188 SendIMessage
耶耶好愉快

b012. 羅馬數字 | From: 36.238.206.235 | Post Date:2021-09-13 08:35:23.0

 

#include

#include

#include

#include

using namespace std;

int main(int argc, const char * argv[])

{

    char a[100];

    int b[1000],c,d,e;

    cin>>a;

    c=strlen(a);

    e=0;

    for(d=0;d<strlen(a);d++)

    {

        if(a[d]=='I')

            b[d]=1;

        else if(a[d]=='V')

            b[d]=5;

        else if(a[d]=='X')

            b[d]=10;

        else if(a[d]=='L')

            b[d]=50;

        else if(a[d]=='C')

            b[d]=100;

        else if(a[d]=='D')

            b[d]=500;

        else if(a[d]=='M')

            b[d]=1000;

    }

    for(d=0;d<strlen(a);d+=2)

    {

        if(b[d]1])

            e+=b[d+1]-b[d];

        else if(b[d]>=b[d+1])

            e+=b[d]+b[d+1];

    }

    if(strlen(a)%2==1)

        e+=b[strlen(a)-1];

    cout<

    

    return 0;

}


最後面的

    if(strlen(a)%2==1)

        e+=b[strlen(a)-1];

 

這個不太清楚你想要判斷甚麼

 


文章類型: 一般 | Reply | Back
User Re:這樣不能解這一題嗎?

sagit SendIMessage
sagit

b012. 羅馬數字 | From: 203.64.45.191 | Post Date:2021-09-13 10:53:36.0

     for(d=0;d<strlen(a);d+=2)

    {

        if(b[d]<[d+1])

            e+=b[d+1]-b[d];

        else if(b[d]>=b[d+1])

            e+=b[d]+b[d+1];

    }

 如果輸入 XIX,你上面的判斷就會錯了


 


文章類型: 一般 | Reply | Back
User Re:這樣不能解這一題嗎?

ty104509 SendIMessage
fw

b012. 羅馬數字 | From: 1.200.89.171 | Post Date:2021-09-13 17:25:48.0

     for(d=0;d<strlen(a);d+=2)

    {

        if(b[d]<[d+1])

            e+=b[d+1]-b[d];

        else if(b[d]>=b[d+1])

            e+=b[d]+b[d+1];

    }

 如果輸入 XIX,你上面的判斷就會錯了


 

#include<iostream>

#include<math.h>

#include<iomanip>

#include <string>

using namespace std;

int main(int argc, const char * argv[])

{

    char a[100];

    int b[1000],c,d,e;

    cin>>a;

    c=strlen(a);

    e=0;

    for(d=0;d<strlen(a);d++)

    {

        if(a[d]=='I')

            b[d]=1;

        else if(a[d]=='V')

            b[d]=5;

        else if(a[d]=='X')

            b[d]=10;

        else if(a[d]=='L')

            b[d]=50;

        else if(a[d]=='C')

            b[d]=100;

        else if(a[d]=='D')

            b[d]=500;

        else if(a[d]=='M')

            b[d]=1000;

    }

    for(d=0;d<c;d+=2)

    {

           if(b[d]<b[d+1])

               e+=b[d+1]-b[d];

           else if(b[d]>=b[d+1])

               e+=b[d]+b[d+1];

    }

    cout<<e;

    return 0;

}

應該只有這樣才對 但還是跑不出來

我以為奇數長度的最後一個沒辦法進迴圈  

 


文章類型: 一般 | Reply | Back
User Re:這樣不能解這一題嗎?

cges30901 SendIMessage
cges30901

b012. 羅馬數字 | From: 27.52.102.84 | Post Date:2021-09-13 19:16:46.0

     for(d=0;d<strlen(a);d+=2)

    {

        if(b[d]<[d+1])

            e+=b[d+1]-b[d];

        else if(b[d]>=b[d+1])

            e+=b[d]+b[d+1];

    }

 如果輸入 XIX,你上面的判斷就會錯了


 

#include

#include

#include

#include

using namespace std;

int main(int argc, const char * argv[])

{

    char a[100];

    int b[1000],c,d,e;

    cin>>a;

    c=strlen(a);

    e=0;

    for(d=0;d<strlen(a);d++)

    {

        if(a[d]=='I')

            b[d]=1;

        else if(a[d]=='V')

            b[d]=5;

        else if(a[d]=='X')

            b[d]=10;

        else if(a[d]=='L')

            b[d]=50;

        else if(a[d]=='C')

            b[d]=100;

        else if(a[d]=='D')

            b[d]=500;

        else if(a[d]=='M')

            b[d]=1000;

    }

    for(d=0;d2)

    {

           if(b[d]1])

               e+=b[d+1]-b[d];

           else if(b[d]>=b[d+1])

               e+=b[d]+b[d+1];

    }

    cout<

    return 0;

}

應該只有這樣才對 但還是跑不出來

我以為奇數長度的最後一個沒辦法進迴圈  


d+=2就不對了,這樣子會變成b[0]和b[1],b[2]和b[3],b[4]和b[5]...以此類推,但是如果b[1]小於b[2]就會出錯了

另外你的程式如果輸入長度是奇數也會有問題,會超過陣列長度

 


文章類型: 一般 | Reply | Back
User Re:這樣不能解這一題嗎?

ya622188 SendIMessage
耶耶好愉快

b012. 羅馬數字 | From: 36.238.206.235 | Post Date:2021-09-13 19:21:00.0

     for(d=0;d<strlen(a);d+=2)

    {

        if(b[d]<[d+1])

            e+=b[d+1]-b[d];

        else if(b[d]>=b[d+1])

            e+=b[d]+b[d+1];

    }

 如果輸入 XIX,你上面的判斷就會錯了


 

#include

#include

#include

#include

using namespace std;

int main(int argc, const char * argv[])

{

    char a[100];

    int b[1000],c,d,e;

    cin>>a;

    c=strlen(a);

    e=0;

    for(d=0;d<strlen(a);d++)

    {

        if(a[d]=='I')

            b[d]=1;

        else if(a[d]=='V')

            b[d]=5;

        else if(a[d]=='X')

            b[d]=10;

        else if(a[d]=='L')

            b[d]=50;

        else if(a[d]=='C')

            b[d]=100;

        else if(a[d]=='D')

            b[d]=500;

        else if(a[d]=='M')

            b[d]=1000;

    }

    for(d=0;d2)

    {

           if(b[d]1])

               e+=b[d+1]-b[d];

           else if(b[d]>=b[d+1])

               e+=b[d]+b[d+1];

    }

    cout<

    return 0;

}

應該只有這樣才對 但還是跑不出來

我以為奇數長度的最後一個沒辦法進迴圈  

 

demo一個例子: 

XIV = 14

=> b[0]=10, b[1]=1, b[2]=5

你的code會判斷兩次

第一次:e += 10+1 (e=11)

第二次:e += 5 (e=16)

But, 實際上羅馬數字是X=10, IV=4, XIV=14 

 


文章類型: 一般 | Reply | Back
User Re:這樣不能解這一題嗎?

cges30901 SendIMessage
cges30901

b012. 羅馬數字 | From: 27.52.102.84 | Post Date:2021-09-13 19:21:22.0

     for(d=0;d<strlen(a);d+=2)

    {

        if(b[d]<[d+1])

            e+=b[d+1]-b[d];

        else if(b[d]>=b[d+1])

            e+=b[d]+b[d+1];

    }

 如果輸入 XIX,你上面的判斷就會錯了


 

#include

#include

#include

#include

using namespace std;

int main(int argc, const char * argv[])

{

    char a[100];

    int b[1000],c,d,e;

    cin>>a;

    c=strlen(a);

    e=0;

    for(d=0;d<strlen(a);d++)

    {

        if(a[d]=='I')

            b[d]=1;

        else if(a[d]=='V')

            b[d]=5;

        else if(a[d]=='X')

            b[d]=10;

        else if(a[d]=='L')

            b[d]=50;

        else if(a[d]=='C')

            b[d]=100;

        else if(a[d]=='D')

            b[d]=500;

        else if(a[d]=='M')

            b[d]=1000;

    }

    for(d=0;d2)

    {

           if(b[d]1])

               e+=b[d+1]-b[d];

           else if(b[d]>=b[d+1])

               e+=b[d]+b[d+1];

    }

    cout<

    return 0;

}

應該只有這樣才對 但還是跑不出來

我以為奇數長度的最後一個沒辦法進迴圈  


d+=2就不對了,這樣子會變成b[0]和b[1],b[2]和b[3],b[4]和b[5]...以此類推,但是如果b[1]小於b[2]就會出錯了

另外你的程式如果輸入長度是奇數也會有問題,會超過陣列長度

可以改成d++,然後最後一個字另外處理

而且不是#include <string>,應該是cstring吧

 


文章類型: 一般 | Reply | Back
User Re:這樣不能解這一題嗎?

ya622188 SendIMessage
耶耶好愉快

b012. 羅馬數字 | From: 36.238.206.235 | Post Date:2021-09-13 19:26:09.0

     for(d=0;d<strlen(a);d+=2)

    {

        if(b[d]<[d+1])

            e+=b[d+1]-b[d];

        else if(b[d]>=b[d+1])

            e+=b[d]+b[d+1];

    }

 如果輸入 XIX,你上面的判斷就會錯了


 

#include

#include

#include

#include

using namespace std;

int main(int argc, const char * argv[])

{

    char a[100];

    int b[1000],c,d,e;

    cin>>a;

    c=strlen(a);

    e=0;

    for(d=0;d<strlen(a);d++)

    {

        if(a[d]=='I')

            b[d]=1;

        else if(a[d]=='V')

            b[d]=5;

        else if(a[d]=='X')

            b[d]=10;

        else if(a[d]=='L')

            b[d]=50;

        else if(a[d]=='C')

            b[d]=100;

        else if(a[d]=='D')

            b[d]=500;

        else if(a[d]=='M')

            b[d]=1000;

    }

    for(d=0;d2)

    {

           if(b[d]1])

               e+=b[d+1]-b[d];

           else if(b[d]>=b[d+1])

               e+=b[d]+b[d+1];

    }

    cout<

    return 0;

}

應該只有這樣才對 但還是跑不出來

我以為奇數長度的最後一個沒辦法進迴圈  


d+=2就不對了,這樣子會變成b[0]和b[1],b[2]和b[3],b[4]和b[5]...以此類推,但是如果b[1]小於b[2]就會出錯了

另外你的程式如果輸入長度是奇數也會有問題,會超過陣列長度

可以改成d++,然後最後一個字另外處理

而且不是#include ,應該是cstring吧

array可以大一點,然後初始值=0 

 


文章類型: 一般 | Reply | Back
User Re:這樣不能解這一題嗎?

ty104509 SendIMessage
fw

b012. 羅馬數字 | From: 185.191.171.38 | Post Date:2021-09-13 21:27:24.0

     for(d=0;d<strlen(a);d+=2)

    {

        if(b[d]<[d+1])

            e+=b[d+1]-b[d];

        else if(b[d]>=b[d+1])

            e+=b[d]+b[d+1];

    }

 如果輸入 XIX,你上面的判斷就會錯了


 

#include

#include

#include

#include

using namespace std;

int main(int argc, const char * argv[])

{

    char a[100];

    int b[1000],c,d,e;

    cin>>a;

    c=strlen(a);

    e=0;

    for(d=0;d<strlen(a);d++)

    {

        if(a[d]=='I')

            b[d]=1;

        else if(a[d]=='V')

            b[d]=5;

        else if(a[d]=='X')

            b[d]=10;

        else if(a[d]=='L')

            b[d]=50;

        else if(a[d]=='C')

            b[d]=100;

        else if(a[d]=='D')

            b[d]=500;

        else if(a[d]=='M')

            b[d]=1000;

    }

    for(d=0;d2)

    {

           if(b[d]1])

               e+=b[d+1]-b[d];

           else if(b[d]>=b[d+1])

               e+=b[d]+b[d+1];

    }

    cout<

    return 0;

}

應該只有這樣才對 但還是跑不出來

我以為奇數長度的最後一個沒辦法進迴圈  


d+=2就不對了,這樣子會變成b[0]和b[1],b[2]和b[3],b[4]和b[5]...以此類推,但是如果b[1]小於b[2]就會出錯了

另外你的程式如果輸入長度是奇數也會有問題,會超過陣列長度

可以改成d++,然後最後一個字另外處理

而且不是#include ,應該是cstring吧

array可以大一點,然後初始值=0 

感謝大家 我以為羅馬數字就是兩個兩個為一組 我一直都看不太懂題目 現在懂了 


 


文章類型: 一般 | Reply | Back

New Thread

ZeroJudge Forum