C++第二学期期末题库(qlu题库,自用)

重点:继承,友元,重载,进制,构造函数

第一次实验

填空

1、

2、

3、 

可以比较明显地看出,我们把李白遇到的情况列出后,是一颗二叉树,而二叉树的遍历,我们可以用递归的方式进行。

当然在进行递归的时候我们要注意终止条件的判断,这题的判断是:

从家门口开始走,有两种可能,遇到店和遇到花

只要李白遇到店不超过5次,遇到花不超过9次,最后一次已确定,就可以继续深搜

代码:

#include<bits/stdc++.h>

using namespace std;

int ans=0;

void dfs(int dian,int hua,int jiu){

    if(dian > 5 || hua > 9){

       return;

    }

    if(dian == 5 && hua == 9 && jiu == 1){

       ans++;

       return;

    }

    dfs(dian+1,hua,jiu*2);

    dfs(dian,hua+1,jiu-1);

}

int main(){

    dfs(0,0,2);

    cout << ans;

    return 0;

}

4、

小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!

站在台阶前,他突然又想着一个问题:

如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?

请你利用计算机的优势,帮助小明寻找答案。

                    【 正确答案: 51167078

所以我们需要对每一个分支进行前序遍历(根左右),那么左边的节点是走一步,右边的节点是走两步,那么dfs(root.left),dfs(root.right),就可以变成dfs(1),dfs(2)。

思路比较清晰,只需要递归:

当走一步,走了一节台阶:f(step+1,n+1);

当走一步,走了两节台阶:f(step+1,n+2);

递归的出口就是偶数步,并且台阶数为39节。

代码:

//第39级台阶

#include<bits/stdc++.h>

using namespace std;

int num=0;

void f(int step,int n)

{

    if(n>39)

       return;

    if(n==39 && step%2==0)

    {

       num++;

       return;

    }

    f(step+1,n+1);

    f(step+1,n+2);

}

int main ()

{

    f(0,0);

    printf("%d",num);

    return 0;

}

编程题

1、

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 

输入例子:

3

10

81

0

输出例子:

1

5

40

#include<stdio.h>
int main ()
{
    int i,j,a;
    for (i=1; i<100; i++)
    {
        for (j=1; j<100; j++)
        {
            a=i*19+j*23;
            if (a==823&&i>j)
                printf ("%d\n",j);
        }
    }
    return 0;
}

2、学生成绩管理系统

【问题描述】编写一个基于结构体得学生成绩信息管理系统。

主要功能如下: 1. 用结构体存放所有数据。

2. 每个功能都用函数实现。

3. 输入10个学生的学号和三门课程的成绩。

4. 计算每个学生的总分。

5. 按总分从高到低排序。

6. 加上名次一列。

7. 输出最后的二维表格样式的成绩,含学号、三门课成绩、总分、名次。

请编写五个函数完成相应功能的实现。其中:

input_data(STU s[]):输入原始数据函数。

calculate(STU s[]):计算总分函数。

sort_total(STU s[]):根据总分降序排序函数。

add_rank(STU s[]):增加名次列函数。

print_data(STU s[]):输出二维表格样式成绩的函数。

【输入形式】用户依次输入10名学生的学号和三门课成绩。

【输出形式】输出最后的二维表格样式的成绩,含学号、三门课成绩、总分、名次(包含表头),要求每个学生信息占用一行,每个数据占用15个字符且左对齐。

【样例输入】

10001 67 71 69 

10002 78 83.5 94.2

10003 61 67 87.5 

10004 88 89 92 

10005 66.7 78.6 93

10006 67 72 77

10007 74 63 89

10008 93 74 66

10009 74 76 81

10010 78 91 83

【样例输出】

Number:        Chinese:       Mathematics:   English:       Total score:   Ranking

10004            88                89                      92               269               1

10002            78                83.5                   94.2            255.7             2

10010            78                91                      83               252               3

10005            66.7             78.6                   93               238.3             4

10008            93                74                      66               233               5

10009            74                76                      81               231               6

10007            74                63                      89               226               7

10006            67                72                      77               216               8

10003            61                67                      87.5            215.5             9

10001            67                71                      69               207               10

【样例说明】用户依次输入10名学生的学号和三门课成绩。输出为二维表格样式的成绩,含学号、三门课成绩、总分、名次(包含表头),每个学生信息占用一行,每个数据占用15个字符且左对齐。

【评分标准】 结果完全正确得20分,每个测试点10分。提交程序名为:scoremanage.c或scoremanage.cpp

 

#include<iostream>
#include<iomanip>
using namespace std;

const int N=10;
struct STU
{
	public:
		int num;
		double score1;
		double score2;
		double score3;
		doub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值