2022年包河区青少年信息学竞赛小学组试题解析
迪丽瓦拉
2024-06-01 18:46:36
0

第一题:最高分姓名 (name)

[问题描述]

学校给学信息学的同学举办一次小测试,现给出参与测试的同学姓名和分数,老师想表扬最高分的同学,请你把最高分的学生姓名输出来(最高分唯一)

[输入格式]

输入有n+1行, 第1行为1个正整数,表示数的个数:N (1到100之间的整数) 后N行有N个姓名(字符串)和分数(0到500之间的整数),用空格隔开

[输出格式]

最高分姓名

[样例输入]

2

wangdada 100

lixiaoxiao 99

[例输出]

wangdada

#include
#include
using namespace std;
struct student{string name;int score;
};
int comp(student a,student b){return a.score>b.score;
}
int main(){student stu[101];int n;cin>>n;for(int i=0;i>stu[i].name>>stu[i].score;}sort(stu,stu+n,comp);cout<

第二题:颠倒的数字(numbers)

[问题描述] 一些数字可以颠倒过来看,例如0、1、8颠倒过来还是本身,6颠倒过来是9,9颠倒过来看还是6.其他数字颠倒过来都不构成数字。类似的,一些多位数也可以颠倒过来看,比如106颠倒过来是901,颠倒的数字就是原数字。假设这个数字只由n位数字组成(n为整数,3<=n<=210),每一位都可以取0到9。请判断m个数字是不是颠倒后还是不是原数,还是原数就输出1,不是原数输出0

[输入格式]

m+1行,第一行一个整数m,m为int类型范围 后面m行整数,每一个整数占一行

[输出格式]

输出m行,每行不是1就是0

[样例输入]

2

1234

88888

[样例输出]

0

1

#include
using namespace std;
int main(){int m;cin>>m;long long a[m];for(int i=0;i>a[i];}for(int i=0;i

第三题:找单词游戏 (words)

[问题描述] 如何快速找到一行句子里最长和最短的单词,输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字符构成,单词间的间隔可能是多个空格、句号和逗号,试输出第1个最长的单词和第1个最短单词。

[输入格式]

一行句子。

[输出格式]

第1行,第一个最长的单词.

第2行,第一个最短的单词。

[样例输入]

I love Hefei,I love learning Programming.

[输出]

Programming

I

#include
using namespace std;
int main()
{char a[20000];cin.getline(a,200000);//gets(a); //输入数组int n=strlen(a); //计算长度int t=0;int max1,min1,max2,min2,maxn=0,minn=100; //1和2分别为起始位置和结束位置,//带n的计算长度   a[n]=' '; //在最后一个单词后加空格,否则单词无法计算                                                                   for(int i=0; i<=n; i++) //枚举{if(a[i]!=' ' && a[i]!=','&&a[i]!='.') //如果是单词t++; //计数器加一else if(t>0) //否则{if(t>maxn) //如果大于最大{maxn=t; //计算长度max1=i-t; //起始位置max2=i-1; //结束位置}if(t

第四题:排队预登记 (line)

[问题描述] 排队是件头疼的事,在社区中登记信息有的时候需要排一个很长的队,但是其实每个人的优先级都不一样,比如我们可以采用预登记的方式,提前摸排人员情况,让年纪大的先排队,体现人文关怀。现在将预登记的人员按照以下原则排出的先后顺序:

1.老年人(年龄>= 60岁)比非老年人优先排队。

2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。

3.非老年人按登记的先后顺序排队。

4.残疾人不论年纪大小,一律上门做登记,不参与排队。

[输入格式]

第1行,输入一个小于100的正整数,表示个数; 后面按照登记的先后顺序,每行输入一个人的信息,包括:一个长度小于10的字符串表示人的ID(每个人的ID各不相同且只含数字和字母),一个整数表示人的年龄,另一个整数表示是否是残疾人,是为1,否为0,中间用单个空格隔开。

[输出格式]

按排好的顺序输出人的ID,每行一个

[样例输入]

6

21075 40 0

14003 15 0

10158 67 0

14658 57 1

21033 75 0

12012 30 0

[样例输出]

21033

10158

21075

14003

12012

#include
#include
using namespace std;
struct people{string id;int age;int iscanji;
};
int comp(people a,people b){return a.age>b.age;
}
int main(){people p[101];people p1[101];//老年人 people p2[101];//非老年人 int n,j=0,k=0;cin>>n;for(int i=0;i>p[i].id>>p[i].age>>p[i].iscanji;if(p[i].iscanji==0&&p[i].age>=60){p1[j++]=p[i];}else if(p[i].iscanji==0&&p[i].age<60){p2[k++]=p[i];}}sort(p1,p1+j,comp);for(int i=0;i

第五题:运输木材 (tree)

[问题描述]

牛牛家有一个林场,现有 条木材,每条木材的长度已知且均为正整数。木材可以以任意正整数长度切割,但不可以连接。假设木材直径都一致,现有卡车可装m条木材,但是卡车长度有限,现在要从这些木材中切割出 m 条长度相同的木材,为经济效益最大化,应该选择多长的卡车,求这些木材的最大长度是多少。

[输入格式]

第一行是一个不超过 100的正整数 n。

第二行是 n个不超过10的6次方的正整数,表示每条材的长度。

第三行是一个不超过10的8次方的正整数 m。

[输出格式]

绳段的最大长度,若无法切割,输出“Failed”

[样例输入]

3

30 20 55

4

[样例输出]

20

#include
using namespace std;
int a[100010];
int main()
{int n,m,l=0,r=100000001;cin>>n;for (int i=1; i<=n; ++i)cin>>a[i];cin>>m;while(r-l>1){int mid=(l+r)/2;int sum = 0;for (int i=1; i<=n; ++i)sum += a[i]/mid;if(sum>=m) l=mid;else r=mid;}cout<

相关内容