Hduoj2816【字符串】【水题】

#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个字符的编码,第一个数字表示键盘上的数字键,第二个数字表示该键上的第几个字符,将数字转换成字符,接着将对应的字符通过题目给出的规律再次进行转换,得到一个新的字符串,将字符串平分成2个部分,前面的长度大于后面的,再将这2个部分重新组合得到最终的答案。

思路:思路就是题意,很清晰,就是通过对字符串的逐步操作得出最终的答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值