练习题记录,题解明天写
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」