期中考试补题报告

2023.11.9

非编程题:40

编程题:180

1【达达家的小卖部】:0

2【手术排队】:0

3【进制转换】:100

4【生日】:80(本来应该100的,老师说看完了把我的分补回来)

1【达达家的小卖部】

题目描述:

达达家有个小卖部,每当放学之后会有很多小伙伴到他家买东西。细心的达达发现每次有小伙伴们来购物的时候会在找商品的环节上花费很多时间,原来是达达的爸爸进完货之后会随意将商品摆放在一个位置,这就造成小伙伴们会花费较多的时间找商品。现在小可想将商品按照字典序从小到大的顺序将商品排好顺序,但是由于商品较多,整理顺序会花费相当长的时间,请你帮助小可写一个程序将所有的商品排好顺序。

输入描述

输入包含n+1行。
第一行一个正整数n,表示商品的数量;
接下来n行,每行一个字符串,表示商品名,字符串长度不超过50且不包含空格。

输出描述

输出一行,n个商品名,商品名之间用两个空格隔开。

思路:

定义一个string类型的数组,循环n次输入,再从小到大排序。

AC代码:

#include<iostream>
#include<iomanip>
#include<cmath> 
#include<string>
#include<algorithm> 
#include<cstdio>
using namespace std;
int main(){
	int n;
	cin>>n;
	string s[205];
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	sort(s+1,s+1+n);
	for(int i=1;i<=n;i++){
		cout<<s[i]<<"  ";
	}
	return 0;
}

2【手术排队】

题目描述:

医院是最为繁忙的地点之一,每天都会有许多病人需要排队手术,秦医生所在科室也是如此,由于病人的年龄、病情均不相同,现在需要根据病人的病情以及年龄高低排出一个合适的手术时间表。秦医生会按照病情的危重情况先给较为严重的病人进行手术,而如果两人的病情基本一致的话,则根据年龄从高到低进行排队手术。现在,秦医生请你根据登记病人的情况排出一个合适的手术顺序。

输入描述:

输入包含n+1行,
第一行一个正整数n,表示病人数量(5<=n<=50);
接下来n行,每行包含病人的姓名(一个不包含空格的字符串)、年龄以及病情的危重情况(危重情况等级为1~10级)

输出描述:

输出n行,每行一个排序之后的病人的姓名

思路:用结构体去定义变量,再用结构体数组和cmp函数(从大到小)排序 ,最后循环输出。

AC代码:

#include<iostream>
#include<iomanip>
#include<cmath> 
#include<string>
#include<algorithm> 
#include<cstdio>
using namespace std;
struct stu{
	string mz;
	int y;
	int z;
}s[105];
bool cmp(stu a,stu b){
	if(a.z<b.z){
		return 1;
	}
	else if(a.z==b.z&&a.y<b.y){
		return 1;
	}
	else{
		return 0;
	}
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[i].mz>>s[i].y>>s[i].z;
	}
	sort(s+1,s+1+n,cmp);
	for(int i=1;i<=n;i++){
		cout<<s[i].mz<<endl;
	}
	return 0;
}

   3【进制转换】     

题目描述:

输入十进制正整数n和k,输出n的k进制数。

我们熟悉的十进制所需的10个基数(基本的数字符号)是0,1,2,3,4,5,6,7,8,9。

当10<k<=16时,k进制的k个基数从小到大分别依次是:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F中的前k个符号。

如n=6,k=2时,6的2进制表示是110。

如n=30,k=16时,30的16进制表示是1E。

输入描述:

输入一行,两个正整数n和k,中间一个空格隔开。(1<=n<=1000000,2<=k<=16)

输出描述:

输出一行,n的k进制数。

思路:

没什么好说的,就是十进制转任意进制的代码(具体详见主页“进制转换”文章)

AC代码:

#include<iostream>
#include<iomanip>
#include<cmath> 
#include<string>
#include<algorithm> 
#include<cstdio>
using namespace std;
int main(){
	int n,x;
	int i=0; 
	char a[1000];
	cin>>n>>x;
	while(n!=0){
		int t=n%x;
		n=n/x;
		if(t<10){
			t=t+'0';
		}
		else{
			t=t-10+'A';
		}
		a[i]=t;
		i++;
	}
	for(int j=i-1;j<=0;j--){
	  cout<<a[j];
	}
	return 0;
}

4【生日】

题目描述:

小可想统计一下班里面每位同学的生日,并按照从大到小排序,请你写一个程序帮助她完成这项工作。

输入描述:

输入n+1行,
第一行一个正整数n,表示班里学生人数(5<n<100)
接下来n行,分别是每位同学的姓名,出生年、月、日

输出描述:

输出n行,每行一个排好序之后的学生姓名。(如果有两位同学的生日相同,输入靠后的同学姓名先输出)

思路:也是用结构体去定义变量,cmp函数里判断交不交换,再sort(从大到小)排序 ,最后循环输出。注:还要定义一个序号,用来判断出生年月日相同时哪个是后输入的。

AC代码:

#include<iostream>
#include<iomanip>
#include<cmath> 
#include<string>
#include<algorithm> 
#include<cstdio>
using namespace std;
struct stu{
	string mz;
	int nf;
	int yf;
	int rq;
}s[105];
bool cmp(stu a,stu b){
	if(a.nf>b.nf){
		return 1;
	}
	else if(a.nf==b.nf&&a.yf>b.yf){
		return 1;
	}
	else if(a.nf==b.nf&&a.yf==b.yf&&a.rq>b.rq){
		return 1;
	}
	else{
		return 0;
	}
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[i].mz>>s[i].nf>>s[i].yf>>s[i].rq;
	}
	sort(s+1,s+1+n,cmp);
	for(int i=1;i<=n;i++){
		cout<<s[i].mz<<endl;
	}
	return 0;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值