OJ题目分享

发布于:2024-04-07 ⋅ 阅读:(149) ⋅ 点赞:(0)

【问题3】

本问题中,我们用以下的编码表示一定范围内的整数:

  1. 10〜35:以大写英文字母AZ表示;
  2. 0〜9:以字符’0’9表示;
  3. -1-10:分别以!@#$%?&*()表示;
  4. -11-36:以小写英文字母az示;

这样一来,这些整数均可以由单个字符表示。

如,数列[0,35,18, 2]便可表示为0Zh@

前者书写时需要8个字符不含括号逗号,后者只需4个字符。

上山容易下山难。你在自己的硬盘里翻出了一段以这种格式编码的数据,你希望将这些数据复原。

请编写程序完成这件事。

【输入形式】

输入一行,是一个字符串,表示压缩后的数据。该字符串满足以下三个条件

1不为空。

2仅包含题目中的编码字符。

3长度不超过10000

【输岀形式】

输出共2行。

第一行1个正整数n表示数据个数。

第二行n个以空格分隔的整数a1,a2an表示复原的结果。

【样例输入】

0Zh@

【样例输出】

4

0  35   -18  -2

【样例说明】

字符串长度为4对应编码4个数字,第一行输出4。

第二行依次输出4个整数,空格分隔:第一个字符0对应数字0第二个大写字母Z对应35第三个小写字母h对应-18最后的@对应-2

【评分标准】

根据输入要求输出指定的结果,提交程序名为:code.c。

暴力代码:

#include<stdio.h>
int  turn(char x){
	switch(x){
		case 'A':
			return 10;
			break;
		case 'B':
			return 11;
			break;
		case 'C':
			return 12;
			break;
		case 'D':
			return 13;
			break;
		case 'E':
			return 14;
			break;
		case 'F':
			return 15;
			break;
		case 'G':
			return 16;
			break;
		case 'H':
			return 17;
			break;
		case 'I':
			return 18;
			break;
		case 'J':
			return 19;
			break;
		case 'K':
			return 20;
			break;
		case 'L':
			return 21;
			break;
		case 'M':
			return 22;
			break;
		case 'N':
			return 23;
			break;
		case 'O':
			return 24;
			break;
		case 'P':
			return 25;
			break;
		case 'Q':
			return 26;
			break;
		case 'R':
			return 27;
			break;
		case 'S':
			return 28;
			break;
		case 'T':
			return 29;
			break;
		case 'U':
			return 30;
			break;
		case 'V':
			return 31;
			break;
		case 'W':
			return 32;
			break;
		case 'X':
			return 33;
			break;
		case 'Y':
			return 34;
			break;
		case 'Z':
			return 35;
			break;
		case '0':
			return 0;
			break;
		case '1':
			return 1;
			break;
		case '2':
			return 2;
			break;
		case '3':
			return 3;
			break;
		case '4':
			return 4;
			break;
		case '5':
			return 5;
			break;
		case '6':
			return 6;
			break;
		case '7':
			return 7;
			break;
		case '8':
			return 8;
			break;
		case '9':
			return 9;
			break;
		case '!':
			return -1;
			break;
		case '@':
			return -2;
			break;
		case '#':
			return -3;
			break;
		case '$':
			return -4;
			break;
		case '%':
			return -5;
			break;
		case '?':
			return -6;
			break;
		case '&':
			return -7;
			break;
		case '*':
			return -8;
			break;
		case '(':
			return -9;
			break;
		case ')':
			return -10;
			break;
		case 'a':
			return -11;
			break;
		case 'b':
			return -12;
			break;
		case 'c':
			return -13;
			break;
		case 'd':
			return -14;
			break;
		case 'e':
			return -15;
			break;
		case 'f':
			return -16;
			break;
		case 'g':
			return -17;
			break;
		case 'h':
			return -18;
			break;
		case 'i':
			return -19;
			break;
		case 'j':
			return -20;
			break;
		case 'k':
			return -21;
			break;
		case 'l':
			return -22;
			break;
		case 'm':
			return -23;
			break;
		case 'n':
			return -24;
			break;
		case 'o':
			return -25;
			break;
		case 'p':
			return -26;
			break;
		case 'q':
			return -27;
			break;
		case 'r':
			return -28;
			break;
		case 's':
			return -29;
			break;
		case 't':
			return -30;
			break;
		case 'u':
			return -31;
			break;
		case 'v':
			return -32;
			break;
		case 'w':
			return -33;
			break;
		case 'x':
			return -34;
			break;
		case 'y':
			return -35;
			break;
		case 'z':
			return -36;
			break;
	}
}
int main(){
	char c[10000]={'0'};
	int sum=0;
	scanf("%s",&c);
	int end[10000]={0}; 
	while(c[sum]!='\0'){//记住符号串结尾是\0;
		end[sum]=turn(c[sum]);
		sum++;
	}
	printf("%d\n",sum);
	for(int i=0;i<sum;i++){
		printf("%d ",end[i]);
	}
}


网站公告

今日签到

点亮在社区的每一天
去签到