Hduoj 2816【文字列】【水題】
3319 ワード
#include<stdio.h>
#include<string.h>
char str[1001], S[26] = {'K','X','V','M','C','N','O','P','H','Q','R','S','Z','Y','I','J','A','D','L','E','G','W','B','U','F','T'};
char s[502], s1[251], s2[251];
void get()
{
int i, l, k;
l = strlen(str);
k = 0;
for(i = 0; i < l; i += 2)
{
if(str[i] == '2')
{
if(str[i+1] == '1')
s[k] = 'A';
if(str[i+1] == '2')
s[k] = 'B';
if(str[i+1] == '3')
s[k] = 'C';
}
else if(str[i] == '3')
{
if(str[i+1] == '1')
s[k] = 'D';
if(str[i+1] == '2')
s[k] = 'E';
if(str[i+1] == '3')
s[k] = 'F';
}
else if(str[i] == '4')
{
if(str[i+1] == '1')
s[k] = 'G';
if(str[i+1] == '2')
s[k] = 'H';
if(str[i+1] == '3')
s[k] = 'I';
}
else if(str[i] == '5')
{
if(str[i+1] == '1')
s[k] = 'J';
if(str[i+1] == '2')
s[k] = 'K';
if(str[i+1] == '3')
s[k] = 'L';
}
else if(str[i] == '6')
{
if(str[i+1] == '1')
s[k] = 'M';
if(str[i+1] == '2')
s[k] = 'N';
if(str[i+1] == '3')
s[k] = 'O';
}
else if(str[i] == '7')
{
if(str[i+1] == '1')
s[k] = 'P';
if(str[i+1] == '2')
s[k] = 'Q';
if(str[i+1] == '3')
s[k] = 'R';
if(str[i+1] == '4')
s[k] = 'S';
}
else if(str[i] == '8')
{
if(str[i+1] == '1')
s[k] = 'T';
if(str[i+1] == '2')
s[k] = 'U';
if(str[i+1] == '3')
s[k] = 'V';
}
else if(str[i] == '9')
{
if(str[i+1] == '1')
s[k] = 'W';
if(str[i+1] == '2')
s[k] = 'X';
if(str[i+1] == '3')
s[k] = 'Y';
if(str[i+1] == '4')
s[k] = 'Z';
}
k++;
}
s[k] = '\0';
}
void change()
{
int i, l;
l = strlen(s);
for(i = 0; i < l; ++i)
s[i] = S[s[i] - 'A'];
}
void cut()
{
int i, j, l, l1, l2;
l = strlen(s);
if(l & 1)
{
l1 = l/2 + 1;
l2 = l - l1;
for(i = 0; i < l1; ++i)
s1[i] = s[i];
for(i = l1; i < l; ++i)
s2[i-l1] = s[i];
}
else
{
l1 = l/2;
l2 = l1;
for(i = 0; i < l1; ++i)
s1[i] = s[i];
for(i = l1; i < l; ++i)
s2[i-l1] = s[i];
}
i = 0;
while(l1 >= 0)
{
if(l1 > l2)
{
s[i++] = s1[l1-1];
l1--;
}
else
{
s[i++] = s2[l2-1];
l2--;
}
}
}
int main()
{
int i, j, k;
while(gets(str) != NULL)
{
get();//get str
change();
cut();
puts(s);
}
return 0;
}
題意:一連の数字を与えて、n文字の符号化を表して、第1の数字はキーボードの上の数字のキーを表して、第2の数字はこのキーの上の第数の文字を表して、数字を文字に変換して、それから対応する文字をテーマの与える規則を通じて再び変換して、1つの新しい文字列を得て、文字列を2つの部分に分けて、前の長さは後のより大きくて、この2つの部分を再結合して最終的な答えを得る.
構想:構想は題意で、はっきりしていて、文字列の逐次操作を通じて最終的な答えを出すことです.