C++四级抽测题目(答案+题目)

今天我给大家出一套C++四级考题

限时1小时,大家加油!!!

题目1:改变二维数组

题目描述

输入一个 n 行 m 列的二维数组,把它的奇数和偶数行互换后输出。(如果 n 为奇数,最后的一行无需调换位置)

n , m 为不超过 20 的正整数。数组内的数据为不大于 200 的正整数。

输入格式

共 n+1 行

第一行包括两个数字 n 和 m 。

第二行到第 n+1 行是这个数组里的数据。数据间用空格隔开。

输出格式

输出 n 行的改变后的数组。

样例

输入数据 1

3 2
1 2
5 6
7 8

输出数据 1

5 6
1 2
7 8

 

 题目2:书架

题目描述

为了方便同学们查阅资料,程序设计兴趣小组的辅导老师打算将积攒了很多年的 n 本书放到上课教室的书架上去。

教室的书架是一层一层叠起来的,每一层最多可以放 m 本书。每一层的高度由放在这层中最高的那本书决定的,如果不放书,则认为这层的高度为 0 。为了使每个同学能方便地拿到想要的书,书架的总高度应尽可能低。请编程计算将这 n 本书放在书架上后书架的最小总高度,计算的过程中不考虑书的厚度与书架本身材料的厚度。

输入格式

输入共 n+1 行。

第 1 行 2 个整数 n 和 m (1 ≤ m ≤ n ≤ 100000 ) 。

接下来 n 行,每行 1 个正整数,分别表示每本书的高度( 每本书的高度不超过100 )。

输出格式

一个整数,表示将 n 本书放入书架后书架的最小总高度。

样例

输入数据 1

3 2
20 10 30

输出数据 1

40

 

题目3:出生日期

题目描述

小明想调查他们信息学班里面每个同学的年龄,并且按照年龄从大到小的顺序排序。

但是小明最近很忙,所以请你帮他解决一下排序问题。

输入格式

有两行。

第一行为总人数 n ( 1 <= n <= 1000 );

第二行至 n+1 行分别是每个人的姓名 s 、出生年 y 、月 m 、日 d (姓名是长度不超过20个字符的英文);

输出格式

有 n 行,即 n 个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

样例

输入数据 1

3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1

输出数据 1

Luowen
Yangchu
Qiujingya

 

 题目4:

题目描述

小明想调查他们信息学班里面每个同学的年龄,并且按照年龄从大到小的顺序排序。

但是小明最近很忙,所以请你帮他解决一下排序问题。

输入格式

有两行。

第一行为总人数 n ( 1 <= n <= 1000 );

第二行至 n+1 行分别是每个人的姓名 s 、出生年 y 、月 m 、日 d (姓名是长度不超过20个字符的英文);

输出格式

有 n 行,即 n 个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

样例

输入数据 1

3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1

输出数据 1

Luowen
Yangchu
Qiujingya

 

 题目1答案:

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,a[201][201];
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
  for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(i%2==0)
            cout<<a[i-1][j]<<" ";
            if(i%2==1)
            {
                if(i!=n)
                {
                    cout<<a[i+1][j]<<" ";
                }
                else 
                {
                    cout<<a[i][j]<<" ";
                }
            }
        }
        cout<<endl;
    }
    return 0;
}

题目2答案:

代码

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100005],s;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    for(int i=n;i>=0;i-=m)
    {
        s=s+a[i];
    }
    cout<<s;
    return 0;   
}

 题目3答案:

代码

#include<bits/stdc++.h>
using namespace std;
    int n; 
    struct xs
	{
        string name;
        int nian,yue,ri,xh;
    }
    a[1002];
    bool cmp(xs x,xs y)
	{
        if(x.nian!=y.nian)
		{
            return x.nian<y.nian;
        }
		else 
		{
            if(x.yue!=y.yue)
			{
                return x.yue<y.yue;
            }
            else 
			{
                if(x.ri!=y.ri)
				{
					return x.ri<y.ri;
				} 
                else 
				{
					return x.xh>y.xh;
				}
            }
        }
    }
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
	{
        cin>>a[i].name>>a[i].nian>>a[i].yue>>a[i].ri;
        a[i].xh=i;
    }
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++)
	{
        cout<<a[i].name<<"\n";
    }
    return 0;
}

 

题目4答案:

代码

#include<bits/stdc++.h>
using namespace std;
long long x,s,l;
int main()
{
    cin>>x;
    if(x<=4)s=32;
    else
    {
        s+=(x/6)*36;
        l=x%6;
        if(l==5)
        {
            s+=36;
        }
        if(l==4||l==3)
        {
            s+=32;
        }
        if(l==2||l==1)
        {
            s+=28;
        }
    }
    cout<<s;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值