0
点赞
收藏
分享

微信扫一扫

1043 输出PATest(附详细注释,逻辑分析)


写在前面

  • 实现思路
  • 整型数组存储字符出现次数
  • 字符数组预定义排序
  • 题目简单,15分钟a题

测试用例

input:
redlesPayBestPATTopTeePHPereatitAPPT
output:

ac代码

  • 算法笔记(参考)

#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 10010;
char str[maxn], dict[6] = {'P','A','T','e','s','t'};
int hashTable[6] = {0};

int main()
{
scanf("%s", str);
int len = strlen(str), sum=0;
for(int i=0; i< len; i++)
{
for(int j=0; j<6; j++)
{
if(str[i] == dict[j])
{
hashTable[j]++;
sum++;
}
}
}
while(sum > 0)
{
for(int i=0; i<6; i++)
{
if(hashTable[i]>0)
{
printf("%c", dict[i]);
hashTable[i]--;
sum--;
}
}
}
return 0;
}

  • 个人改造版
  • 数组存储字符出现次数,下标为字符ascii码
  • 目标字符(6个)hash表初始化为1(hashTable方便全部初始化为0)
  • 打印输出个数大于1,消除初始化的次数1。灵活思考点

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

const int maxn = 10010;
char str[maxn], dict[6] = {'P','A','T','e','s','t'};
int hashTable[256] = {0};
int main()
{
hashTable['P'] = hashTable['A'] = hashTable['T'] = 1;
hashTable['e'] = hashTable['s'] = hashTable['t'] = 1;
scanf("%s", str);
int len = strlen(str), sum=0;
for(int i=0; i< len; i++)
if(hashTable[str[i]]>0)
{
hashTable[str[i]]++;
sum++;
}

while(sum > 0)
{
for(int i=0; i<6; i++)
if(hashTable[dict[i]]>1)
{
printf("%c", dict[i]);
hashTable[dict[i]]--;
sum--;
}
}

return 0;
}

学习代码

  • ​​1043. 输出PATest(20).cpp···推荐···​​
  • 整型数组记录字符出现次数,下标为字符对应ascii值
  • 逐个读入字符,结束符ch!=EOF
  • 循环打印次数不为0字符并动态更新剩余打印次数

#include <iostream>
using namespace std;
int main() {
int map[128] = {0}, c;
while ((c = cin.get()) != EOF) map[c]++;
while (map['P'] > 0 || map['A'] > 0 || map['T'] > 0 || map['e'] > 0 || map['s'] > 0 || map['t'] > 0) {
if (map['P']-- > 0) cout << 'P';
if (map['A']-- > 0) cout << 'A';
if (map['T']-- > 0) cout << 'T';
if (map['e']-- > 0) cout << 'e';
if (map['s']-- > 0) cout << 's';
if (map['t']-- > 0) cout << 't';
}
return 0;
}


举报

相关推荐

0 条评论