練習題記錄,題解明天寫

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; 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章