练习题记录,题解明天写

1.捡石头
【题目描述】
小强在河边捡了 2 块漂亮的石头,他想再捡两块石头,让这 4 块石头的质量正好为 30 斤,并且新捡的两块石头的质量是介于前两块石头的质量之间的数字,请编程输出第 3 块和第 4 块石头的质量。注:每个石头的重量都是整数,如果找不到合适 的石头,则输出 0 0。
【输入格式】
输入 2 个数,数与数之间以空格间隔,表示 2 块石头的质量。
【输出格式】
输出表示第 3、4 块石头的质量的所有可能结果,每块石头质量的数字用空
格隔开。多组结果时,按第 3 块石头质量从小到大排序分行输出。
【样例输入】(测试数据不包含本样例)
1 11
【样例输出】
8 10
9 9
\br

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b,c,d;
	int min,max;
	bool exist = false;
	cin>>a>>b;
	if(a>b){
		min = b;
		max = a;
	}else if(a<b){
		min = a;
		max = b;
	}else{
		min = max = a;
	}
	for(c=min,d=30-a-b-c;c<=d;c++,d--){
		//cout<<c<<" "<<d<<endl;
		if(c>a && d<b){
			cout<<c<<" "<<d<<endl;
			exist = true;
		}
	}
	if(!exist){
		cout<<0<<" "<<0<<endl;
	}
}

2.判断数字出现了几次
【题目描述】
给定一个正整数n,判断从 1 到这个数本身的所有数中,一共出现了多少次数字k。
【输入格式】
输入共 1 行,包括一个正整数 n 和一个正整数 k。(0<n<32767,0<k<10)
【输出格式】
输出共 1 行,一个整数,表示 1 到 n 之间的所有数 (包括n),一共出现了几次k。
【样例输入】(测试数据不包含本样例)
13 3
【样例输出】
2

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	cin>>a>>b;
	int count=0;
	for(int i=1;i<=a;i++){
		int num = i;
		while(num!=0){
			if(num%10==b){
				count++;
			}
			num = num/10;
		}
	}
	cout<<count<<endl; 
}

3.滑雪板打包问题
【题目描述】
一家新开业的滑雪场,需要采购不同规格的滑雪板,每个滑雪板的长度是不
固定的,现在需要把排列好的滑雪板用木板做成木箱封装好进行快递,每次快递
的总重 量是有限制的,不能超过重量 G。只要每次打包的重量不超过 G,多个滑
雪板可以摞 放在一起,使用与最长滑雪板长度相同的两个木板进行固定。假设,
给出排列好的 每个滑雪板的重量 Gi ,和长度 Li ,请计算需要最少多长的木板
才能将所有的滑雪板 把包好。
【输入格式】
输入的第一行有两个数字,一个是滑雪板的个数,一个是包裹总重量。以下
滑雪板个数行,每行的第一个数是滑雪板的重量 Gi 和长度 Li。
【输出格式】
输出需要最少的木板的总长度。注:每次打包需要 2 个木板。
【样例输入】(测试数据不包含本样例)
5 5
2 1
1 2
1 3
2 3
2 2
【样例输出】
10

#include<bits/stdc++.h>
using namespace std;
struct ski {
	int len;
	int weight;
};
bool cmp(ski a,ski b) {
	return a.len<b.len;
}
int main() {
	int m,n;//m表示有m组数据,n表示包裹重量是n
	int sum_length = 0;
	int sum_weight = 0;
	int length_max = 0;
	cin>>m>>n;
	vector<ski>v;
	for(int i=0; i<m; i++) {
		int gi,li;
		cin>>gi>>li;
		ski s = {gi,li};
		v.push_back(s);
	}
	sort(v.begin(),v.end(),cmp);
	for(int i=0; i<v.size(); i++) {
		cout<<v[i].weight<<" "<<v[i].len<<endl;
	}
	for(int i=0; i<v.size(); i++) {
		if(v[i].weight+sum_weight>n) {
			sum_length+=length_max;
			sum_weight = v[i].weight;
			length_max = v[i].len;
		}else{
			sum_weight+=v[i].weight;
			if(length_max<v[i].len) length_max=v[i].len;
		}
	}
	cout<<(sum_length+length_max)*2<<endl;
	return 0;
}

4.统计考试成绩
【题目描述】
期末考试结束了,老师要统计班里学生的考试成绩分布,已知每个同学的考
试成绩为在 0 到 100 分之间的整数,设计一个程序,输入每个同学的成绩,计算
出在 平均成绩 (成绩平均值向下取整) 之上的 (大于等于平均成绩) 和在平均成绩
之下 的 (小于平均成绩) 的同学的人数。
【输入格式】
第一行 n 为学生成绩个数,0<n<50。
第二行,由空格隔开的每个同学的成绩,为 1 到 100 间的整数。
【输出格式】
两个整数,由空格隔开,为平均分以上人数和平均分以下人数。
【样例输入】(测试数据不包含本样例)
12
100 80 93 66 73 50 96 100 84 47 97 71
【样例输出】
7 5

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,a=0,b=0;
	int arr[50];
	int sum=0;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>arr[i];
		sum+=arr[i];
	}
	int average = sum/n;
	for(int i=0;i<n;i++){
		if(arr[i]>=average){
			a++;
		}else{
			b++;
		}
	}
	cout<<a<<" "<<b<<endl;
    return 0; 
}
posted @ 2024-03-27 21:57  Pudding10335  阅读(71)  评论(0编辑  收藏  举报