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;
}