数据排序练习1

数据排序

[例] 统计字符数

[题目]

​ 给定一个由a~z26个字符组成的字符串,统计其中哪个符号出现的次数最多。

[输入]

​ 输入包括一行,一个字符串,一个整数,长度不超过1000

[输出]

​ 输出一行,包括出现次数最多的字符和该字符出现的次数,中间用一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。

[样例输入]

1
abbcc

[样例输出]

1
c 3

[例题参考答案]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int maxn, a[26];
string s;
char ans;
int main() {
cin >> s;
for(int i = 0; i < s.size(); i++) {
a[s[i] - 'a']++; //将s的第i个字符的出现个数存在a里(按字母顺序存储)," -'a' "的意义是,把字符转成0~25的数字,共26个字母
}
for(int i = 0; i <= 26; i++) {
if(a[i] > maxn) { //从0扫到25(a扫到z),除非是大于否则都没法更新maxn和ans,这样可以简化题目的最后一个条件(如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。)。
maxn = a[i]; //标记字符出现次数
ans = i + 'a'; //标记字符,同理" +'a' "是把数字存储的a~z变回字符
}
}
cout << ch << " " << maxn << endl; //输出
return 0;
}

[练] 出现次数超过一半的数

[题目]

​ 给出一个含有n(0<n≤1000)个整数的数组,请找出其中出现次数超过一半的数。数组中的数一定大于-50且小于50

[输入]

​ 第一行包含一个整数n,表示数组的大小;

​ 第二行包含n个整数,分别是数组中的每个元素,相邻两个元素之间用单个空格隔开。

[输出]

​ 如果存在这样的数,输出这个数;否则输出no

[样例输出]

1
2
3
1 2 2

[样例输出]

1
2

关于

本篇文章作者是serverDream