0、收获
题目简单,但是在代码写法上可能更精简
1、题目
1043 输出PATest (20 分)+
2、思路
将PATest字母个数储存起来,然后每次判断字母个数是否为0,不为0则打印该字母并个数-1。 在储存上用了一个map[128]的数组来储存,这是因为ASCII有256个字符,但是题目说了仅含英文字母,故实际上128的数组来储存就行。
先看自己写的代码:
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
string inp;
cin >> inp;
int arr[256] = {0};
for (int i = 0; i < inp.length(); i++)
{
arr[inp[i]]++;
}
for (int i = 0;i<inp.length();i++ )
{
if (arr['P'] != 0)
{
cout << 'P';
arr['P']--;
}
if (arr['A'] != 0)
{
cout << 'A';
arr['A']--;
}
if (arr['T'] != 0)
{
cout << 'T';
arr['T']--;
}
if (arr['e'] != 0)
{
cout << 'e';
arr['e']--;
}
if (arr['s'] != 0)
{
cout << 's';
arr['s']--;
}
if (arr['t'] != 0)
{
cout << 't';
arr['t']--;
}
}
return 0;
}
虽然原理简单,但是看起来很多。
下面是ln的代码:
#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;
}
注意map['P']-- > 0 是现将map[‘P’]和0比较后,map[‘P’]再自减。
a++:先利用a再自加 ++a:先自加再利a
|