#1798: 第四個測資...@@


xx52002 (冰清影)

學校 : 國立彰化師範大學
編號 : 6559
來源 : [125.231.121.73]
最後登入時間 :
2023-09-19 23:19:58
a013. 羅馬數字 -- NPSC 模擬試題 | From: [163.28.80.40] | 發表日期 : 2009-04-17 20:07

與正確輸出不相符(line:4)
您的答案為: VII
正確答案為: V
可是我跑了一次從0~4000裡面 所有相差為5的羅馬數字輸入都沒出現問題啊..orz

#include <stdio.h>
#include <math.h>

int main()
{
 char roma1[30], roma2[30];
 char inp[30];
 int inte1 = 0, inte2 = 0;
 int i;
 int ans;
 int ans1, ans2, ans3, ans4;

 for (i = 0; i < 30; i++)
  inp[i] = 0;
 while (scanf("%s", inp) != EOF && inp[0] != '#')
 {
  for (i = 0; i < 30; i++)
  {
   roma1[i] = 0;
   roma2[i] = 0;
  }
  scanf("%s", roma2);
  for (i = 0; i < 30; i++)
   roma1[i] = inp[i];
  inte1 = 0;
  inte2 = 0;
  for (i = 0; i < 30; i++)
  {
   if (roma1[i] == 'M')
    inte1 += 1000;

   if (roma1[i] == 'D')
    inte1 += 500;

   if (roma1[i] == 'C')
   {
    if (roma1[i+1] == 'M')
    {
     inte1 += 900;
     roma1[i+1] = 0;
    }
    else if (roma1[i+1] == 'D')
    {
     inte1 += 400;
     roma1[i+1] = 0;
    }
    else
     inte1 += 100;
   }

   if (roma1[i] == 'L')
    inte1 += 50;

   if (roma1[i] == 'X')
   {
    if (roma1[i+1] == 'C')
    {
     inte1 += 90;
     roma1[i+1] = 0;
    }
    else if (roma1[i+1] == 'L')
    {
     inte1 += 40;
     roma1[i+1] = 0;
    }
    else
     inte1 += 10;
   }

   if (roma1[i] == 'V')
    inte1 += 5;

   if (roma1[i] == 'I')
   {
    if (roma1[i+1] == 'X')
    {
     inte1 += 9;
     roma1[i+1] = 0;
    }
    else if (roma1[i+1] == 'V')
    {
     inte1 += 4;
     roma1[i+1] = 0;
    }
    else
     inte1 += 1;
   }
  }
  for (i = 0; i < 30; i++)
  {
   if (roma2[i] == 'M')
    inte2 += 1000;

   if (roma2[i] == 'D')
    inte2 += 500;

   if (roma2[i] == 'C')
   {
    if (roma2[i+1] == 'M')
    {
     inte2 += 900;
     roma2[i+1] = 0;
    }
    else if (roma2[i+1] == 'D')
    {
     inte2 += 400;
     roma2[i+1] = 0;
    }
    else
     inte2 += 100;
   }
   if (roma2[i] == 'L')
    inte2 += 50;

   if (roma2[i] == 'X')
   {
    if (roma2[i+1] == 'C')
    {
     inte2 += 90;
     roma2[i+1] = 0;
    }
    else if (roma2[i+1] == 'L')
    {
     inte2 += 40;
     roma2[i+1] = 0;
    }
    else
     inte2 += 10;
   }

   if (roma2[i] == 'V')
    inte2 += 5;

   if (roma2[i] == 'I')
   {
    if (roma2[i+1] == 'X')
    {
     inte2 += 9;
     roma2[i+1] = 0;
    }
    else if (roma2[i+1] == 'V')
    {
     inte2 += 4;
     roma2[i+1] = 0;
    }
    else
     inte2 += 1;
   }
  }

  ans = abs(inte1 - inte2);
  if (ans == 0)
   printf("ZERO");
  else
  {
   ans1 = ans / 1000;
   ans2 = (ans / 100) % 10;
   ans3 = (ans / 10) % 10;
   ans4 = ans % 10;

   if (ans1)
    for (i = 0; i < ans1; i++)
     printf("M");
   
   switch (ans2)
   {
   case 1: printf("C");break;
   case 2: printf("CC");break;
   case 3: printf("CCC");break;
   case 4: printf("CD");break;
   case 5: printf("D");break;
   case 6: printf("DC");break;
   case 7: printf("DCC");break;
   case 8: printf("DCCC");break;
   case 9: printf("CM");break;
   }

   switch (ans3)
   {
   case 1: printf("X");break;
   case 2: printf("XX");break;
   case 3: printf("XXX");break;
   case 4: printf("XL");break;
   case 5: printf("L");break;
   case 6: printf("LX");break;
   case 7: printf("LXX");break;
   case 8: printf("LXXX");break;
   case 9: printf("XC");break;
   }

   switch (ans4)
   {
   case 1: printf("I");break;
   case 2: printf("II");break;
   case 3: printf("III");break;
   case 4: printf("IV");break;
   case 5: printf("V");break;
   case 6: printf("VI");break;
   case 7: printf("VII");break;
   case 8: printf("VIII");break;
   case 9: printf("IX");break;
   }
  }
  printf("\n");
 }
 return 0;
}

 

 
#1804: Re:第四個測資...@@


etude (MADAO)

學校 : 國立臺北科技大學
編號 : 6407
來源 : [140.124.13.250]
最後登入時間 :
2009-05-17 17:19:05
a013. 羅馬數字 -- NPSC 模擬試題 | From: [140.124.13.250] | 發表日期 : 2009-04-18 09:21

與正確輸出不相符(line:4)
您的答案為: VII
正確答案為: V
可是我跑了一次從0~4000里面 所有相差為5的羅馬數字輸入都沒出現問題啊..orz

#include
#include

int main()
{
 char roma1[30], roma2[30];
 char inp[30];
 int inte1 = 0, inte2 = 0;
 int i;
 int ans;
 int ans1, ans2, ans3, ans4;

 for (i = 0; i < 30; i++)
  inp[i] = 0;
 while (scanf("%s", inp) != EOF && inp[0] != '#')
 {
  for (i = 0; i < 30; i++)
  {
   roma1[i] = 0;
   roma2[i] = 0;
  }
  scanf("%s", roma2);
  for (i = 0; i < 30; i++)
   roma1[i] = inp[i];
  inte1 = 0;
  inte2 = 0;
  for (i = 0; i < 30; i++)
  {
   if (roma1[i] == 'M')
    inte1 += 1000;

   if (roma1[i] == 'D')
    inte1 += 500;

   if (roma1[i] == 'C')
   {
    if (roma1[i+1] == 'M')
    {
     inte1 += 900;
     roma1[i+1] = 0;
    }
    else if (roma1[i+1] == 'D')
    {
     inte1 += 400;
     roma1[i+1] = 0;
    }
    else
     inte1 += 100;
   }

   if (roma1[i] == 'L')
    inte1 += 50;

   if (roma1[i] == 'X')
   {
    if (roma1[i+1] == 'C')
    {
     inte1 += 90;
     roma1[i+1] = 0;
    }
    else if (roma1[i+1] == 'L')
    {
     inte1 += 40;
     roma1[i+1] = 0;
    }
    else
     inte1 += 10;
   }

   if (roma1[i] == 'V')
    inte1 += 5;

   if (roma1[i] == 'I')
   {
    if (roma1[i+1] == 'X')
    {
     inte1 += 9;
     roma1[i+1] = 0;
    }
    else if (roma1[i+1] == 'V')
    {
     inte1 += 4;
     roma1[i+1] = 0;
    }
    else
     inte1 += 1;
   }
  }
  for (i = 0; i < 30; i++)
  {
   if (roma2[i] == 'M')
    inte2 += 1000;

   if (roma2[i] == 'D')
    inte2 += 500;

   if (roma2[i] == 'C')
   {
    if (roma2[i+1] == 'M')
    {
     inte2 += 900;
     roma2[i+1] = 0;
    }
    else if (roma2[i+1] == 'D')
    {
     inte2 += 400;
     roma2[i+1] = 0;
    }
    else
     inte2 += 100;
   }
   if (roma2[i] == 'L')
    inte2 += 50;

   if (roma2[i] == 'X')
   {
    if (roma2[i+1] == 'C')
    {
     inte2 += 90;
     roma2[i+1] = 0;
    }
    else if (roma2[i+1] == 'L')
    {
     inte2 += 40;
     roma2[i+1] = 0;
    }
    else
     inte2 += 10;
   }

   if (roma2[i] == 'V')
    inte2 += 5;

   if (roma2[i] == 'I')
   {
    if (roma2[i+1] == 'X')
    {
     inte2 += 9;
     roma2[i+1] = 0;
    }
    else if (roma2[i+1] == 'V')
    {
     inte2 += 4;
     roma2[i+1] = 0;
    }
    else
     inte2 += 1;
   }
  }

  ans = abs(inte1 - inte2);
  if (ans == 0)
   printf("ZERO");
  else
  {
   ans1 = ans / 1000;
   ans2 = (ans / 100) % 10;
   ans3 = (ans / 10) % 10;
   ans4 = ans % 10;

   if (ans1)
    for (i = 0; i < ans1; i++)
     printf("M");
   
   switch (ans2)
   {
   case 1: printf("C");break;
   case 2: printf("CC");break;
   case 3: printf("CCC");break;
   case 4: printf("CD");break;
   case 5: printf("D");break;
   case 6: printf("DC");break;
   case 7: printf("DCC");break;
   case 8: printf("DCCC");break;
   case 9: printf("CM");break;
   }

   switch (ans3)
   {
   case 1: printf("X");break;
   case 2: printf("XX");break;
   case 3: printf("XXX");break;
   case 4: printf("XL");break;
   case 5: printf("L");break;
   case 6: printf("LX");break;
   case 7: printf("LXX");break;
   case 8: printf("LXXX");break;
   case 9: printf("XC");break;
   }

   switch (ans4)
   {
   case 1: printf("I");break;
   case 2: printf("II");break;
   case 3: printf("III");break;
   case 4: printf("IV");break;
   case 5: printf("V");break;
   case 6: printf("VI");break;
   case 7: printf("VII");break;
   case 8: printf("VIII");break;
   case 9: printf("IX");break;
   }
  }
  printf("\n");
 }
 return 0;
}

 

羅馬數字轉成數值的地方有誤,

列舉幾項:

IX=9!=10
X=10!=11
XI=11!=12
XIX=19!=20
XX=20!=21

 
#1821: Re:第四個測資...@@


xx52002 (冰清影)

學校 : 國立彰化師範大學
編號 : 6559
來源 : [125.231.121.73]
最後登入時間 :
2023-09-19 23:19:58
a013. 羅馬數字 -- NPSC 模擬試題 | From: [163.28.80.40] | 發表日期 : 2009-04-20 01:21

羅馬數字轉成數值的地方有誤,

列舉幾項:

IX=9!=10
X=10!=11
XI=11!=12
XIX=19!=20
XX=20!=21

試了一下,在中間加上printf("%d %d\n", inte1, inte2);

丟這些項進去都是輸出正確的數值@@...

IX X
9 10
I

XI XIX
11 19
VIII

 
#1822: Re:第四個測資...@@


etude (MADAO)

學校 : 國立臺北科技大學
編號 : 6407
來源 : [140.124.13.250]
最後登入時間 :
2009-05-17 17:19:05
a013. 羅馬數字 -- NPSC 模擬試題 | From: [140.124.13.250] | 發表日期 : 2009-04-20 06:28

羅馬數字轉成數值的地方有誤,

列舉幾項:

IX=9!=10
X=10!=11
XI=11!=12
XIX=19!=20
XX=20!=21

試了一下,在中間加上printf("%d %d\n", inte1, inte2);

丟這些項進去都是輸出正確的數值@@...

IX X
9 10
I

XI XIX
11 19
VIII

剛試了一下,單獨測真的沒問題@@

我是用連續值測的,轉換完8之後再轉其他值就會錯誤了。

 
ZeroJudge Forum