image

编辑人: 长安花落尽

calendar2025-12-08

message9

visits231

2023年09月C语言二级参考答案

一、编程题

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

参考答案:

include<bits/stdc++.h>

using namespace std;

int a[105];

int main()

{

int n,k;

cin>>n>>k;

for (int i=1;i<=n;i++)

{

cin>>a[i];

}

for (int i=k;i>=1;i–)

{

cout<<a[i]<<" ";

}

for (int i=k+1;i<=n;i++)

{

cout<<a[i]<<" ";

}

return 0;

}


2、序列排序
对于给定的正整数序列,按照每个数的各位数和从大到小排序,各位数和相同的按照本身大小排序,大的在前,小的在后。
时间限制:1000
内存限制:65536
输入
第一行1个整数n,表示序列的大小。( 0 < n ≤ 1000) 第二行n个正整数,表示序列的每个数,每个数不大于100000000。
输出
输出按照题目要求排序后的序列
样例输入

6
17 26 9 13 88 10 

样例输出

88 9 26 17 13 10

参考答案:

include<bits/stdc++.h>

using namespace std;

struct num{

int a;

int g;

}s[100];

bool cmp(num a,num b){

if(a.g<b.g)

return a.g;

if(a.g>b.g)

return b.g;

if(a.a>b.a)

return b.a;

return a.a;

}

int main()

{

int n;

cin>>n;

for(int i=1;i<=n;i++){

cin>>s[i].a;

s[i].g=s[i].a%10;

}

sort(s+1,s+1+n,cmp);

for(int i=1;i<=n;i++){

cout<<s[i].a<<" ";

}

return 0;


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

参考答案:

include<iostream>

using namespace std;

int main(){

int m,n,sum=0;

cin>>m>>n;

int a[m][n];

for(int i=0;i<m;i++){

for(int j=0;j<n;j++){

cin>>a[i][j];

}

}

for(int i=0;i<m;i++){

for(int j=0;j<n;j++){

if(i!=0&&i!=m-1&&j!=0&&j!=n-1)

sum+=a[i][j];

}

}

cout<<sum;

return 0;

}


4、谁考了第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

参考答案:

include <iostream>

using namespace std;

int id[110];

double s[110];

int main(){

int n,k,it;

double t;

cin>>n>>k;

for(int i=0;i<n;i++) cin>>id[i]>>s[i];

for(int i=0;i<n;i++){

int k=i;

for(int j=i;j<n;j++) if(s[j]<s[k]) k=j;

if(k!=i){

t=s[i];

s[i]=s[k];

s[k]=t;

it=id[i];

id[i]=id[k];

id[k]=it;

}

}

cout<<id[n-k]<<" "<<s[n-k];

return 0;

}


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

参考答案:

include <bits/stdc++.h>

using namespace std;

int main()

{

int n;

int m;

cin >> n;

int sender;

int mentioned;

int a[101][101] = { 0 };

for (int i = 0; i < n; i++) {

cin >> sender;//sender表示接下来要发微博的人

cin >> m;//m表示接下来要Q的人数

for (int j = 0; j < m; j++) {

cin >> mentioned;

a[sender][mentioned]++;

}

}

int max = 1;

//max表示被Q到最多的人的下标

for (int i = 1; i <= 100; i++) {

for (int j = 1; j <= 100; j++) {

a[0][i] += a[j][i];

}

if (a[0][i] > a[0][max])

max = i;

}

cout << max << endl;

bool isfirst=true;

for (int i = 1; i <= 100; i++) {

if ((a[i][max]) && (isfirst)) {

cout << i;

isfirst = false;

}

else if ((a[i][max]) && (!isfirst))

cout << " " << i;

}

return 0;

}


喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2023年09月C语言二级参考答案

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share