栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++期末考试

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++期末考试

前言

        蘑菇培优C++期末考试个人解法......

一、蛋糕分享 1.题目描述

        现在有一个长方形的蛋糕,长 x 米,宽 y 米,想要平均分给小朋友吃,为了公平,分享的每块蛋糕必须是正方形,请问这样的正方形蛋糕边长最大是多少?

2.题目解析 

        这道题靠最大公约数的求法,只用递归即可还原(辗转相除)。

3.AC代码 
#include//调用输入输出流头文件 
using namespace std;//使用标准名字空间 
long long gcd(long long x,long long y){//最大公约数 
	if(x%y==0) return y;//递归边界 
	return gcd(y,x%y);//递归 
}
int main(){//主函数开始 
	long long a,b;//长整数a,b 
	cin>>a>>b;//输入a,b的值 
	cout< 
二、数列 
1.题目描述 

        联欢会上,主持人先在黑板上写了四个数字,分别是:2,0,1,9,然后说:“这 串数字从第五个数起,每一个数都是它前四数字之和的个位数字”。请你打印输 出这个数列的前 N 项,并计算前 N 项的和。

        输入格式 单个整数:表示项数 N

        输出格式 第一行:N 个数字,表示所求数列的前 N 项。

                        第二行:单个数字,表示前 N 项数字的和。

        注意:行末不能有多余空格!!!

2.题目解析 

        这道题运用递推(其实题目的用意已经引到了递推的结构里),依次循环,数组进行计算即可。

        详细讲一下:运用数组x[  ] ,先将前四项初始化为2.0.1.9,再进行循环:x[i]=(x[i-1]+x[i-2]+x[i-3]+x[i-4])%10;

3.AC代码 
#include//调用输入输出流头文件 
using namespace std;//使用标准名字空间 
int x[100009];//存放数字 
int N,sum;//数量,总和 
int main(){//主函数开始 
	cin>>N;//输入N的值 
	x[0]=2;//第一项 
	x[1]=0;//第二项 
	x[2]=1;//第三项
	x[3]=9;//第四项
	for(int i=4;i 
 三、单词替换 
1.题目描述 

        输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干 个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要 将其中的某个单词替换成另一个单词,并输出替换之后的字符串。

        输入格式:

        输入包括 3 行,第 1 行是包含多个单词的字符串 s;第 2 行是待替换的单词 a(长度 <= 10 0); 第 3 行是 a 将被替换的单词 b(长度 <= 100). s, a, b 最前面和最后面都没有空格。

        输出格式:

        输出只有 1 行,将 s 中第一次出现的单词 a 替换成 b,若没有找到 a 就输出原字符串。

        输入样例#1:

        ha ha ha

        ha

        wa

        输出样例#1:

        wa ha ha

2.题目解析 

        这道题考了一个重点:find函数。许多信奥学者都在传统书籍上没有见过,但需要一提的是,他在字符串的题目来说比较好用。

        我们需要注意空格的处理问题。比如处理不当会把开头和结尾的单词误舍去,因此需要在各方两头添加空格。

        在输出时记住覆盖部分的位置,进行continue即可。

3.AC代码 
#include//调用输入输出流头文件 
#include//调用字符串头文件 
using namespace std;//使用标准名字空间 
int fd(string a,string b){//在a中查找单词b
	a=" "+a+" ";//补空格 
	b=" "+b+" ";//补空格 
	int p=a.find(b);//进行查找 
	return p;//返回查找值 
}
int main(){//主函数开始 
	string a,b,c;//句子,寻找,替换 	
	getline(cin,a);//整行输入 
	getline(cin,b);//整行输入
	getline(cin,c);//整行输入
	int p=fd(a,b);//在a中查找单词b
	int s=p+b.size()-1;//结束值 
	if(p==-1){//如果没有相关单词 
		cout 
 四、扫雷游戏 
1.题目描述 

        扫雷游戏是一款十分经典的单机小游戏。在 n 行 m 列的雷区中有一些格子含有地 雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非 地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏 的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。 现在给出 n 行 m 列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。 1≤n≤100, 1≤m≤100。

2.题目解析 

        这是经典的图形点阵题,普遍都非常简单。这里在输入之后,进行二重循环i,j,如果当前为未知数字位,就进行周围*判断。

3.AC代码 
#include//调用输入输出流头文件 
using namespace std;//使用标准名字空间 
char x[109][109];//字符镇 
int n,m;//行,列
bool boom(char a){//判断是否地雷 
	return a=='*';
}
int boom(char a,char b,char c,char d,char e,char f,char g,char h){//函数重载,判断周围有几个地雷 
	return boom(a)+boom(b)+boom(c)+boom(d)+boom(e)+boom(f)+boom(g)+boom(h);
}
int main(){//主函数开始 
	cin>>n>>m;//输入行,列 
	for(int i=1;i<=n;i++)//输入内容 
		for(int j=1;j<=m;j++)
			cin>>x[i][j];
	for(int i=1;i<=n;i++)//判断 
		for(int j=1;j<=m;j++){
			if(x[i][j]=='*')//是地雷 
				continue;//忽略 
			x[i][j]=boom(x[i-1][j-1],x[i-1][j],x[i-1][j+1],x[i][j-1],x[i][j+1],x[i+1][j-1],x[i+1][j],x[i+1][j+1])+'0';//地雷统计 
		}
	for(int i=1;i<=n;i++){//输出内容 
		for(int j=1;j<=m;j++)
			cout< 
 五、出栈顺序 
1.题目描述 

        对于一个栈,已知入栈顺序为 1,2,3,4,…,n,若希望出栈顺序为 a1,a2,a3,…,an,请 判断可能吗?输出 Yes 或 No

2.题目解析 

        方法一(适合口算,会超时):

        这种方法在口算中比较快。就是在每一项后判断比他小的数组成的数列是否降序排列。但是会超时,在编程不推荐,因为会TE3个数据。

        方法二(适合编程,会通过):

        循环判断入栈模拟数组的top是否和出栈次序一致(到栈底结束) 。

3.AC代码 
#include
using namespace std;
const int N=100009;
int stk[N],top=0,a[N]; //stk为入栈模拟数组,a为出栈次序数组 
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++) //输入出栈次序 
	cin>>a[i];
	int inx=1;
	for(int i=1;i<=n;i++) {
		stk[++top]=i;  //按顺序push 
		while(top!=0&&stk[top]==a[inx]){  //循环判断入栈模拟数组的top是否和出栈次序一致(到栈底结束) 
			top--; //如果一致则做一次pop 
			inx++; //然后准备判断现在的栈顶是否和下一个出栈次序一致 
  		}
 	}
 	if(top==0) cout<<"Yes";
 	else cout<<"No";
	return 0;
}
 六、奖学金 1.题目描述

        某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 5 名学生 发奖学金。期末,每个学生都有 3 门课的成绩:语文、数学、英语。先按总分从 高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同 学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生 的排序是唯一确定的。 任务:先根据输入的 3 门课的成绩计算总分,然后按上 述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前 5 名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如, 在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是: 7 279 5 279 这两行数据的含义是:总分最高的两个同学的学号依次是 7 号、5 号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩 之和) ,但学号为 7 的学生语文成绩更高一些。如果你的前两名的输出数据是: 5 279 7 279 则按输出错误处理,不能得分。

2.题目解析 

        这里定义结构体student,代表一个学生的成绩,再用自定义比较函数cmp与快排sort结合,进行最后的排名统计。

3.AC代码 
#include
#include
#include
using namespace std;
const int N=309;
struct student{
	int zh,sx,en,sum,id;
};
student f[N];
bool cmp(const student&a,const student&b){
	if(a.sum>b.sum)return 1;
	if(a.sumb.zh)return 1;
	if(a.zhb.id)return 0;
	return 0;
}
int main(){
	int n;
	cin>>n;
	for(int i=0;i>f[i].zh>>f[i].sx>>f[i].en;
		f[i].id=i+1;
		f[i].sum=f[i].zh+f[i].sx+f[i].en;
	}
	sort(f,f+n,cmp);
	for(int i=0;i<5;i++)
		cout< 
 总结 

        本期就到这里了,谢谢观看。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997212.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号