罗马数字 XLIVII 为什么不合法?
PS:
代码:
40分
#include <bits/stdc++.h>
using namespace std;
map<char , int> alp;
int minn = 100 , lend;
char d[10] , ans[10];
void init()
{
alp['I'] = 1; alp['V'] = 5; alp['X'] = 10;
alp['L'] = 50; alp['C'] = 100;
return;
}
int main()
{
init();
char c = getchar();
while (isalpha(c))
{
d[lend++] = c;
c = getchar();
}
sort(d , d + lend);
do
{
bool flag = true;
for (int i = 0 ; i < lend - 1 ; ++i)
if (d[i] == 'I' && alp[d[i]] < alp[d[i + 1]] && d[i + 1] != 'X' && d[i + 1] != 'V') {flag = false; break;}
if (flag)
{
int num = 0;
int i;
for (i = 0 ; i < lend ; ++i)
{
if (i < lend - 1 && alp[d[i]] < alp[d[i + 1]] && (d[i] == 'I' || d[i] == 'X' || d[i] == 'C')) {num += alp[d[i + 1]] - alp[d[i]]; ++i;}
else num += alp[d[i]];
}
//cout << num << endl;
//for (int i = 0 ; i < lend ; i++) cout << d[i];
//cout << endl;
if (num <= minn) {minn = num; memcpy(ans , d , sizeof(d));}
}
}
while (next_permutation(d , d + lend));
for (int i = 0 ; i < lend ; i++)
cout << ans[i];
return 0;
}