ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PTA乙级1044火星数字(c语言实现)

2022-01-04 12:00:57  阅读:195  来源: 互联网

标签:字符 ch 数字 1044 乙级 char PTA 数组 火星


题目链接:题目详情 - 1044 火星数字 (20 分) (pintia.cn)

这题我感觉有点讨厌,感觉思路其实不算多复杂,就是敲代码的时候容易混

我的解题思路是:先把火星文分别装进两个数组(这个过程有点痛苦。。。)

然后在输入的时候先判断是数字还是字符,然后再进行转换

如果是数字,就好写的多,先把数组里的数字转换为整型,然后分别取模和取余,再储存到e1和e2中,一个是高位数字一个是低位数字,再分别输出就行了,比较容易(这里有个小坑,如果e1,e2都为0的话要输出 tret)

如果是字符的话就很讨厌了,我又设置了两个数组,然后把ch里的字符分别存储到a和b中,如果ch里只有一个火星数字的话,b就是空数组了,然后借助strcmp函数找到对应的数字就ok了

(本人第一次写文章,同时也是大一菜鸟一枚,方法可能不算太好,请多包涵)

#include<stdio.h>
#include<string.h>
int main()
{
	char z[15][5]={"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"};
	char s[15][5]={"","tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};
	char ch[10];
	int i,j,n;
	scanf("%d\n",&n);
	for(i=0;i<n;i++)
	{
		gets(ch);
		if(ch[0]>='0'&&ch[0]<='9')
		{
			int e1,e2,e3;
			for(j=0,e3=0;ch[j]!='\0';j++)
				e3=e3*10+ch[j]-'0';
			e1=e3/13;
			e2=e3%13;
			if(e1)
				printf("%s",s[e1]);
			if(e1&&e2)
				printf(" ");
			if(e2)
				printf("%s",z[e2]);
			if(!e1&&!e2)
				printf("tret");
			printf("\n");
		}
		else
		{
			int k=0,v=0;
			char a[5]={'\0'},b[5]={'\0'};
			for(j=0;ch[j]!='\0';j++)
			{
				if(ch[j]==' ')
					v=1;
				if(v==0)
					a[j]=ch[j];
				if(v==1&&ch[j]!=' ')
					b[k++]=ch[j];
			}
			int num=0;
			for(j=0;j<13;j++)
			{
				if(!strcmp(a,z[j]))
					num=num+j;
				if(!strcmp(a,s[j]))
					num=num+j*13;
				if(!strcmp(b,z[j]))
					num=num+j;
			}
			printf("%d\n",num);
		}
	}
	return 0;
} 

标签:字符,ch,数字,1044,乙级,char,PTA,数组,火星
来源: https://blog.csdn.net/m0_63053227/article/details/122299578

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有