内容正文:
青少年软件编程(C语言)等级考试试卷(二级)
分数:100 题数:5
一、编程题(共5题,共100分)
1. 数组指定部分逆序重放
数组指定部分逆序重放
将一个数组中的前k项按逆序重新存放。例如,将数组8,6,5,4,1前3项逆序重放得到5,6,8,4,1。
时间限制:1000
内存限制:65536
输入
输入为两行: 第一行两个整数,以空格分隔,分别为数组元素的个数n(1 < n < 100)以及指定的k(1 <= k <= n)。 第二行是n个整数,每两个整数之间用空格分隔。
输出
输出为一行:输出按题目要求逆序后数组的整数,每两个整数之间用空格分隔。
样例输入
5 3
8 6 5 4 1
样例输出
5 6 8 4 1
试题编号:20230909-2-01
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
展示地址:点击浏览
考生答案:
#include<bits/stdc++.h>
using namespace std;
int a[1000],b[1000];
int main()
{
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a[i];
b[i]=a[i];
}
for(int j=k-1;j>=0;j--)
{
cout<<a[j]<<' ';
}
for(int i=k;i<n;i++)
{
cout<<a[i]<<' ';
}
}
考生得分:20
是否评分:已评分
评价描述:
2. 序列排序
序列排序
对于给定的正整数序列,按照每个数的各位数和从大到小排序,各位数和相同的按照本身大小排序,大的在前,小的在后。
时间限制:1000
内存限制:65536
输入
第一行1个整数n,表示序列的大小。( 0 < n ≤ 1000) 第二行n个正整数,表示序列的每个数,每个数不大于100000000。
输出
输出按照题目要求排序后的序列
样例输入
6
17 26 9 13 88 10
样例输出
88 9 26 17 13 10
试题编号:20230909-2-02
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
展示地址:点击浏览
考生答案:
#include<bits/stdc++.h>
using namespace std;
int sum(int n)
{
int s = 0;
while(n>0)
{
s+=n%10;
n/=10;
}
return s;
}
int main()
{
int i,j,t,n,a[1000],b[1000];
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
b[i] = sum(a[i]);
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if((b[j] < b[j+1]) || ((b[j] == b[j+1]) && (a[j] < a[j+1])))
{
t = b[j];
b[j] = b[j+1];
b[j+1] = t;
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
for(i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
考生得分:20
是否评分:已评分
评价描述:
3. 内部元素之和
内部元素之和
输入一个整数矩阵,计算位于矩阵内部的元素之和。所谓矩阵内部的元素,不在第一行和最后一行的元素以及第一列和最后一列的元素。
时间限制:1000
内存限制:65536
输入
第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。 接下来输入的m行数据中,每行包含n个整数(每个数大于等于0,小于1000),整数之间以一个空格分开。
输出
输出对应矩阵的内部元素和
样例输入
3 3
3 4 1
3 7 1
2 0 1
样例输出
7
试题编号:20230909-2-03
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
展示地址:点击浏览
考生答案:
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
int sum=0;
int num[110][110];
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>num[i][j];
if(i!=1 and j!=1 and i!=n and j!=m)
{
sum+=num[i][j];
}
}
}
cout<<sum;
return 0;
}
考生得分:20
是否评分:已评分
评价描述:
4. 谁考了第k名
谁考了第k名
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
时间限制:1000
内存限制:65536
输入
第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)。 其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
输出
输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)
样例输入
5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9
样例输出
90788004 68.4
试题编号:20230909-2-04
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
展示地址:点击浏览
考生答案:
#include<bits/stdc++.h>
using namespace std;
double a[101][2];
int main()
{
int n,k;
double c;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&a[i][1],&a[i][2]);
}
for(int i=1;i<n;i++)
{
for(int j=n;j>i;j--)
{
if(a[j][2]>a[j-1][2])
{
c=a[j][2];
a[j][2]=a[j-1][2];
a[j-1][2]=c;
c=a[j][1];
a[j][1]=a[j-1][1];
a[j-1][1]=c;
}
}
}
printf("%ld",(long long)a[k][1]);
printf(" %g",a[k][2]);
}
考生得分:20
是否评分:已评分
评价描述:
5. 话题焦点人物
话题焦点人物
微博提供了一种便捷的交流平台。一条微博中,可以提及其它用户。例如Lee发出一条微博为:“期末考试顺利 @Kim @Neo”,则Lee提及了Kim和Neo两位用户。
我们收集了N(1 < N < 10000)条微博,并已将其中的用户名提取出来,用小于等于100的正整数表示。
通过分析这些数据,我们希望发现大家的话题焦点人物,即被提及最多的人(题目保证这样的人有且只有一个),并找出那些提及它的人。
时间限制:1000
内存限制:65536
输入
输入共两部分: 第一部分是微博数量N,1 < N < 10000。 第二部分是N条微博,每条微博占一行,表示为: 发送者序号a,提及人数k(0 < = k < = 20),然后是k个被提及者序号b1,b2...bk; 其中a和b1,b2...bk均为大于0小于等于100的整数。相邻两个整数之间用单个空格分隔。
输出
输出分两行: 第一行是被提及最多的人的序号; 第二行是提及它的人的序号,从小到大输出,相邻两个数之间用单个空格分隔。同一个序号只输出一次。
样例输入
5
1 2 3 4
1 0
90 3 1 2 4
4 2 3 2
2 1 3
样例输出
3
1 2 4
试题编号:20230909-2-05
试题类型:编程题
标准答案:
试题难度:一般
试题解析:
展示地址:点击浏览
考生答案:
#include<bits/stdc++.h>
using namespace std;
int a[101][101]={0};
int main()
{
int N;
cin>>N;
int temp;
int k;
int t;
int b[101]={0};
for(int i=0;i<N;i++)
{
cin>>temp;
cin>>k;
for(int j=0;j<k;j++)
{
cin>>t;
a[temp][t]=1;
b[t]++;
}
}
int ans=0;
int pos=1;
for(int i=1;i<101;i++)
{
if(b[i]>ans)
{
ans=b[i];
pos=i;
}
}
cout<<pos<<endl;
int flag=0;
for(int i=1;i<101;i++)
{
if(a[i][pos]!=0 && flag==0)
{
cout<<i;
flag=1;
}
else if(a[i][pos]!=0 && flag==1)
{
cout<<" "<<i;
}
}
return 0;
}
考生得分:20
是否评分:已评分
评价描述:
学科网(北京)股份有限公司
$$