C++(排序算法三)练习题
整理试卷
【描述】某次月考结束后,小六班数学老师批改完试卷,准备下节课分发讲评试卷。老师想要按照从高到低的方式分发试卷,你能够帮助老师重新整理这些试卷,按照从高到低的方式输出这些成绩。
【输入】两行,第一行为一个正整数n ,表示小六班参加此次月考的学生人数(0<n<50)。第二行n个正整数,代表小六班参加此次月考的每一个学生的成绩,成绩均在0-100之间(包含0与100 )。
【输出】一行,按照从高到低输出每位学生成绩。
【样例输入】
10
100 98 97 98 88 90 76 100 93 92
【样例输出】
100 100 98 98 97 93 92 90 88 76
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,c[101]={0};
int n;
cin>>n;
// 输入并计数
for(int i=0;i<n;i++){
cin>>x;
c[x]++;
}
// 输出
for(int i=100;i>=0;i--){
for(int j=0;j<c[i];j++){
cout<<i<<" ";
}
}
return 0;
}
/*
【输入用例2】
5
3 1 4 1 5
【输出用例2】
5 4 3 1 1
【输入用例3】
1
100
【输出用例3】
100
【输入用例4】
3
0 0 0
【输出用例4】
0 0 0
【输入用例5】
4
2 2 2 2
【输出用例5】
2 2 2 2
*/
单词排序
【描述】
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)
【输入】
一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符。
【输出】
按字典序输出这些单词,重复的单词只输出一次。
【输入样例】
She wants to go to Peking University to study Chinese
【输出样例】
Chinese
Peking
She
University
go
study
to
wants
#include<bits/stdc++.h>
using namespace std;
int main() {
string a[105];
int k=0;
bool flag;
int i;
while(cin>>a[k]) {
flag=false;
for(i=0; i<k; i++) {
if(a[i].compare(a[k])==0) {
flag=true;
break;
}
}
if(!flag)
k++;
}
sort(a,a+k);
for(i=0; i<k; i++)
cout<<a[i]<<endl;
return 0;
}
/*
【输入用例2】
Youth is not a time of life it is a state of mind
【输出用例2】
Youth
a
is
it
life
mind
not
of
state
time
【输入用例3】
I'd rather share one lifetime with you
【输出用例3】
I'd
lifetime
one
rather
share
with
you
【输入用例4】
Time doth transfix the flourish set on youth
【输出用例4】
Time
doth
flourish
on
set
the
transfix
youth
【输入用例5】
The highest ideal of life is to achieve truth
【输出用例5】
The
achieve
highest
ideal
is
life
of
to
truth
*/
超过一半的数
【描述】
给出一个含有n(0 < n <= 1000)个整数的数组,请找出其中出现次数超过一半的数。
数组中的数大于-50且小于50。
【输入】
第一行包含一个整数n,表示数组大小;
第二行包含n个整数,分别是数组中的每个元素,相邻两个元素之间用单个空格隔开。
【输出】
如果存在这样的数,输出这个数;否则输出no。
【输入样例】
3
1 2 2
【输出样例】
2
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int* arr = new int[n]; // 动态分配数组
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
// 初始化候选元素和计数器
int candidate = arr[0];
int count = 1;
for (int i = 1; i < n; ++i) {
if (arr[i] == candidate) {
count++;
} else {
count--;
if (count == 0) {
candidate = arr[i];
count = 1;
}
}
}
// 验证候选元素是否满足条件
count = 0;
for (int i = 0; i < n; ++i) {
if (arr[i] == candidate) {
count++;
}
}
if (count > n / 2) {
cout << candidate << endl;
} else {
cout << "no" << endl;
}
return 0;
}
/*
【输入用例2】
5
3 3 3 3 3
【输出用例2】
3
【输入用例3】
7
5 5 1 2 3 5 5
【输出用例3】
5
【输入用例4】
4
1 2 3 3
【输出用例4】
no
【输入用例5】
7
2 2 2 3 3 3 3
【输出用例5】
3
【输入用例6】
1
42
【输出用例6】
42
*/
统计字符数
【描述】给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。
【输入】
输入包含一行,一个字符串,长度不超过1000.
【输出】
输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。
如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。
【输入样例】
abbccc
【输出样例】
c 3
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int count[26] = {0}; // 初始化计数数组
for (char c : s) {
count[c - 'a']++; // 统计每个字符出现次数
}
int max_count = 0;
char max_char = 'a'; // 初始化最大值字符为a(ASCII最小)
for (int i = 0; i < 26; ++i) {
if (count[i] > max_count) {
max_count = count[i];
max_char = i + 'a';
}
}
cout << max_char << " " << max_count << endl;
return 0;
}
/*
【输入用例2】
aaaaa
【输出用例2】
a 5
【输入用例3】
b
【输出用例3】
b 1
【输入用例4】
cbbaa
【输出用例4】
a 2
【输入用例5】
abcdfeghijklmnopqrstuvwxyz
【输出用例5】
a 1
*/
更多推荐

所有评论(0)