A 分饼干
题解:三盒饼干,分给两个小朋友,一定有一名小朋友拿到一盒饼干,一名小朋友拿到两盒饼干,因此,可以将分配饼干的情况划分成以下三种情况:
- 一名小朋友拿了一盒 a 块的饼干,一名小朋友拿了两盒 b,c 块的饼干。此时,两人饼干数量差为 ∣a−(b+c)∣。
- 一名小朋友拿了一盒 b 块的饼干,一名小朋友拿了两盒 a,c块的饼干。此时,两人饼干数量差为 ∣b−(a+c)∣。
- 一名小朋友拿了一盒 c 块的饼干,一名小朋友拿了两盒 a,b 块的饼干。此时,两人饼干数量差为 ∣c−(a+b)∣。
我们用一个变量去和饼干数量差打擂台,如果挑战成功,则用两个变量分别记录下两名小朋友拿的饼干数量。最后输出的时候,将多的输出在前,少的输出在后。
方法1:
#include<bits/stdc++.h>
using namespace std;
int a,b,c,maxn=INT_MAX,flag;
int main(){
cin>>a>>b>>c;
if(maxn>abs(a+b-c)){
maxn=abs(a+b-c);
flag=1;
}
if(maxn>abs(a+c-b)){
maxn=abs(a+c-b);
flag=2;
}
if(maxn>abs(b+c-a)){
maxn=abs(b+c-a);
flag=3;
}
if(flag==1){
cout<<max(a+b,c)<<' '<<min(a+b,c);
}
if(flag==2){
cout<<max(a+c,b)<<' '<<min(a+c,b);
}
if(flag==3){
cout<<max(b+c,a)<<' '<<min(b+c,a);
}
return 0;
}
方法2
#include<bits/stdc++.h>
using namespace std;
int main() {
int a,b,c;
cin>>a>>b>>c;
//从小到大排序
if(a>b){
swap(a,b);
}
if(b>c){
swap(b,c);
}
if(a>b){
swap(a,b);
}
if(c>a+b){
cout<<c<<" "<<a+b;
}else if(b>a+c){
cout<<b<<" "<<a+c;
}else{
cout<<a+b<<" "<<c;
}
return 0;
}
B 卡牌
题解:用一个循环枚举每一个卡包,每个卡包用一个变量记录能买下的最贵的卡牌,使用第二个循环读入卡牌的面额,按题意模拟即可。
参考代码:
#include<bits/stdc++.h>
using namespace std;
int x,n,a[6],ans[6];
int main(){
cin>>x>>n;
for(int i=1;i<=n;i++){
int maxn=0;
for(int j=1;j<=5;j++){
cin>>a[j];
if(x>=a[j]){
maxn=max(a[j],maxn);
}
}
ans[maxn]++;
x-=maxn;
}
for(int i=1;i<=5;i++){
cout<<ans[i]<<' ';
}cout<<endl<<x;
return 0;
}
C 科学计数法
题解:由科学计数法的表达式可知,第一个字符先输出,再判断其长度是否为1来决定是否需要输出小数点,再打标记来统计输入的字符串的小数点之前的个数(第一个除外),同时输出非小数点字符,最后再打印乘10的个数次方。
参考代码:
#include <bits/stdc++.h>
using namespace std;
string s;
int cnt,flag;
int main (){
cin>>s;
cout<<s[0];
if(s.size()!=1) cout<<'.';
for (int i=1;i<s.size();i++)
if(s[i]!='.'){
cout<<s[i];
if(!flag) cnt++;
}
else flag=1;
cout<<"*10^"<<cnt;
return 0;
}
D 计算补码
题解:首先特判,若首位为字符’0‘,则原字符串输出,代码结束;将字符串进行倒序存储在数组中,a[0]存储长度,然后除了a[0]的位置不变,其余按位取反(反码),再给a[1]++(补码)需要考虑进位操作,最后倒序输出。
代码:
#include<bits/stdc++.h>
using namespace std;
string s;
int a[1010];
int main(){
cin>>s;
for(int i=0;s[i]!='\0';i++){
a[0]++;
}
if(s[0]=='0'){
cout<<s;
return 0;
}
for(int i=1,j=a[0]-1;i<=a[0];i++,j--){
a[i]=s[j]-'0';
}
for(int i=1;i<a[0];i++){
a[i]=1-a[i];
}
a[1]++;
for(int i=1;i<=a[0];i++){
if(a[i]>1){
a[i+1]++;
a[i]=0;
}else{
break;
}
}
for(int i=a[0];i>=1;i--){
cout<<a[i];
}
return 0;
}