重点:继承,友元,重载,进制,构造函数
第一次实验
填空
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