来源:加码未来2024年深圳罗湖区创客节模拟题(小学组)
第一题
题目描述
给你n个数,找出出现次数超过一半的数。题目保证这样的数一定存在。
输入格式
第一行一个整数n,(n<=1000)
第二行n个整数(<1000000)
输出格式
输出一个整数
样例输入
5
1 2 3 3 3
样例输出
3
参考答案
#include <bits/stdc++.h>
using namespace std;
int a[1005],n;
int main(){
cin >> n;
for(int i = 0; i < n; i++){
cin >> a[i];
int m = 1;
for(int j = 0; j < i; j++){
if(a[j] == a[i]) m++;
}
if(m > n / 2){
cout << a[i] << endl;
return 0;
}
}
return 0;
}
第二题
题目描述
一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。
输入格式
一行,一个字符串(长度不超过200),句子的开头和结尾没有空格。
输出格式
一行,过滤后的字符串。
样例输入
Hello world.This is c language.
样例输出
Hello world.This is c language.
参考答案
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
getline(cin,s);
bool t = 1;
for(int i = 0; i < s.size(); i++){
if(s[i] != ' ') {
cout << s[i];
t = 1;
}
else{
if(t == 1) cout << " ";
t = 0;
}
}
return 0;
}
第三题
题目描述
又到了狗星福盛全工厂发工资的日子,福盛全每次发工资都要经过子里的狗副厂长审核井签字同意。这天,狗副厂长想了解厂里狗员工的薪资情况,他找来管理财务的AC狗,让他把员工工资表拿过来看看每位狗员工有如下几个字段的信息:员工编号、所属部门编号、薪资、职位等级。狗副厂长希望看到的工资表一目了然,所以他定了一个排序规则:
1、薪资从大到小排序。
2、薪资相同时,按照职位等级从大到小排序。
3、薪资、职位等级均相同的情况下,按照所属部门编号从小到大排序。
4、薪资、职位等级、部门均相同时,按照员工编号从小到大排序。
管理财务的AC狗犯了难,虽然他智商比肩袋鼠,但是他不会处理这个事,请你帮他解决这个问题。
输入格式
输入的第一行为正整数 N,代表有 N 个员工。
输入的接下来 N 行,每行包含 4个字段,分别为员工编号、薪资、部门、职位等级。
输出格式
输出仅有一行,包含 N 个整数,表示 N 个员工按照规则排序后的员工编号。
样例输入
6
1 70000 1 2
2 65000 1 2
3 90000 2 1
4 100888 3 3
5 68000 3 2
6 90000 2 3
样例输出
4 6 3 1 5 2
#include<bits/stdc++.h>
using namespace std;
struct person{
int a,b,c,d; // a 员工编号 b 部门编号 c 薪资 d 职位
}arr[1005];
int cmp(person x,person y){
// 顺着逻辑写:需要多层 if 嵌套
// 反推:减少嵌套
if(x.c != y.c) return x.c > y.c;
if(x.d != y.d) return x.d > y.d;
if(x.b != y.b) return x.b < y.b;
return x.a < y.a;
}
int main (){
int n;
cin >> n;
for(int i = 1; i <= n; i++){
cin >> arr[i].a >> arr[i].c >> arr[i].b >> arr[i].d;
}
sort(arr + 1,arr + 1 + n,cmp);
for(int i = 1;i <= n; i++){
cout << arr[i].a <<" ";
}
return 0;
}
第四题
题目描述
木材厂有