PAT乙级 1042 字符统计 (20分) & 1043 输出PATest (20分) & 1044 火星数字 (20分)

30 篇文章 0 订阅
27 篇文章 0 订阅

 1042 字符统计 (20分)

需要注意的是,如果直接输入cin>>a;会导致string a变成一个string数组,而不是单纯的字符串,所以需要使用getline(在string的头文件里,需要添加)

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string a;
	int b[123] = { 0 },max=0;
	char c='A';
	getline(cin, a);//不能使用cin,因为有空格
	for (int i = 0; i < a.size(); i++)
	{
		if (a[i] >= 'A' && a[i] <= 'Z')
			b[(int)(a[i] + 'a'-'A')]++;//大写转小写存入
		if (a[i] >= 'a' && a[i] <= 'z')
			b[(int)a[i]]++;//小写直接存入
	}
	for (int i = 97; i < 123; i++)
	{
		if (b[i] > max)
		{
			max = b[i];//存最大个数,和字母
			c = i;
		}
	}
	
	cout << c << " " << max;
	return 0;
}

1043 输出PATest (20分)

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string a;
	int b[6] = { 0 };
	getline(cin, a);
	for (int i = 0; i < a.size(); i++)
	{
		if (a[i] == 'P')b[0]++;
		if (a[i] == 'A')b[1]++;
		if (a[i] == 'T')b[2]++;
		if (a[i] == 'e')b[3]++;
		if (a[i] == 's')b[4]++;
		if (a[i] == 't')b[5]++;
	}
	while (b[0] != 0 || b[1] != 0 || b[2] != 0 || b[3] != 0 || b[4] != 0 || b[5] != 0)
	{
			if (b[0] != 0) { cout << "P"; b[0]--; }
			if (b[1] != 0) { cout << "A"; b[1]--; }
			if (b[2] != 0) { cout << "T"; b[2]--; }
			if (b[3] != 0) { cout << "e"; b[3]--; }
			if (b[4] != 0) { cout << "s"; b[4]--; }
			if (b[5] != 0) { cout << "t"; b[5]--; }
	}
	return 0;
}

1044 火星数字 (20分)

一个复杂一些的题目,需要注意如果测试点2,4同时出错,是因为输入13整数倍时多输出了一个火星文的0

正确输出应该是:

对应代码段:

else//十位
				if(di!=0)//如果输入的是13的整数倍不需要输出低位数
					v.push_back(b[gao - 1] + " " + a[di]);
				else
					v.push_back(b[gao - 1]);

完整代码:

#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main()
{
	int all = 0;
	cin >> all;
	string a[13] = { "tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec" };
	string b[12] = { "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou" };
	vector<string> v;
	getchar();//防止输入的第一个回车被当做输入!
	for (int i = 0; i < all; i++)
	{
		string temp;
		getline(cin, temp);
		if (temp[0] >= '0' && temp[0] <= '9')//数字转火星文
		{
			
			int temp1 = stoi(temp);
			int di = 0, gao = 0;
			gao = temp1 / 13;
			di = temp1 % 13;
			if (gao == 0)//个位
				v.push_back(a[di]);
			else//十位
				if(di!=0)//如果输入的是13的整数倍不需要输出低位数
					v.push_back(b[gao - 1] + " " + a[di]);
				else
					v.push_back(b[gao - 1]);
		}
		else//火星文转数字
		{
			if (temp.size() == 3)//个位
			{
				int flag = 100;//可能存在输入为一个高位,所以需要考虑两种情况
				for (int i = 0; i < 13; i++)
					if (a[i] == temp)
						flag = i;
				for (int i = 0; i < 12; i++)
					if (b[i] == temp)
						flag = (i+1)*13;
				v.push_back(to_string(flag));
			}
			else//十位
			{
				string b1 = temp.substr(0, 3);//获取十位
				string a1 = temp.substr(4, 3);//获取个位
				int temp1 = 0;
				for (int i = 0; i < 12; i++)
					if (b1 == b[i])
						temp1 += (i + 1) * 13;
				for (int i = 0; i < 13; i++)
					if (a1 == a[i])
						temp1 += i;
				v.push_back(to_string(temp1));
			}
		}
	}
	for (int i = 0; i < v.size(); i++)
		cout << v[i] << endl;

	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用中的说明,给定一个字符串"pat"和一个长度为104的字符串,我们需要将104个字符按照PATest的顺序重新排列,并忽略其他字符。根据引用中的代码,我们可以使用一个map来统计各个字符的出现次数。然后,我们按照PATest的顺序循环输出字符直到所有字符都被输出,每输出一个字符就将其对应的出现次数减少1。 具体步骤如下: 1. 创建一个map来统计字符出现次数。 2. 循环遍历104个字符,如果字符是"P"、"A"、"T"、"e"、"s"、"t"中的任意一个,就将其出现次数加1。 3. 创建一个字符串s1="PATest",用于按照PATest的顺序输出字符。 4. 进入一个循环,循环条件为flag等于1,表示还有字符需要输出。 5. 在循环中,遍历字符串s1,如果字符在map中的出现次数大于0,则将该字符输出,并将其出现次数减1。 6. 如果在循环中有字符输出,则将flag设为1,表示还有字符需要输出。 7. 当循环结束后,所有字符都被输出输出结果为PATest。 因此,根据给定的字符串"pat"和长度为104的字符串,输出应为PATest。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [PAT 1043 输出PATest](https://blog.csdn.net/qq_61117990/article/details/123307930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [PAT 1043 输出PATest (c++)](https://blog.csdn.net/qq_42334822/article/details/122637564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值