题目一:计算邮资
描述
根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克), 基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。
输入描述
输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。
输出描述
输出一行,包含一个整数,表示邮费。
用例输入 1
1200 y
用例输出 1
17
题目思路:
可以首先判断,是否加急,比一个一个去判断要简洁方便。是就+5
之后判断是否小于1000,是就在以上判断完毕的基础上+8;
之后判断>1000的,分为两种情况:
第一种情况:
能整除500的,直接乘以4
第二种情况:
不能整除500的,不能整除500的,整除后除以4,多出来的部分+4元
错误代码:
#include<iostream>
using namespace std;int main() {
int a,s=0;
char c;
cin>>a>>c;
if(c=='y') s+=5;
if(a<1000) s+=8;
if(a>=1000)
{
if((a-1000)/500==0) s+=(a-1000)/500*4;
else if((a-1000)/500!=0) s+=(a-1000)/500*4+4;
}
cout<<s;
return 0;
}
正确代码:
#include<iostream>
using namespace std;
int main() {
int a,s=0;
char c;
cin>>a>>c;
if(c=='y') s+=5;
if(a<=1000) s+=8;
else if(a>1000)
{
if((a-1000)%500==0) s+=8+(a-1000)/500*4;
else if((a-1000)%500!=0) s+=8+(a-1000)/500*4+4;
}
cout<<s;
return 0;
}
错误原因:
没有加上1000克时的八元
题目二:求四个数的最大数
描述
已知有四个不等的数,将其中的最大数找出来。
输入描述
输入只有一行,包括4个整数。之间用一个空格分开。
输出描述
输出只有一行(这意味着末尾有一个回车符号),包括1个整数。
用例输入 1
1 9 8 6
用例输出 1
9
方法:打擂台法
#include<iostream>
using namespace std;
int main() {
int a,b,c,d,max;
cin>>a>>b>>c>>d;
max = a;
if(b>max) max = b;
if(c>max) max =c;
if(d>max) max = d;
cout<<max;
return 0;
}
题目三:能否构成直角三角形
描述
判定三条线段a,b,c能否构成一个直角三角形。如果能构成,请计算出面积(保留一位小数),不然输出’No’。
输入描述
一行,三个整数。
输出描述
面积(保留一位小数) 或 No
用例输入 1
3 4 5
用例输出 1
6.0
来源
分支问题
题目分析:
直角三角形的判断条件:
判定1:有一个角为90°的三角形是直角三角形。
判定2:若a²+b²=c²的平方,则以a、b、c为边的三角形是以c为斜边的直角三角形(勾股定理的逆定理)。
判定3:若一个三角形30°内角所对的边是某一边的一半,那么这个三角形是以这条长边为斜边的直角三角形。
方法一:数组
#include<iostream>
#include<algorithm>
using namespace std;
double a[4];//定义一维数组
int main() {
cin >> a[1] >> a[2] >> a[3];//输入三条边
sort(a + 1, a + 4);//将三条边的大小进行排序
if(a[1] * a[1] + a[2] * a[2] == a[3] * a[3]){//如果符合直角三角形的条件
printf("%.1lf",a[1] * a[2] / 2.0);
}
else{
cout << "No";
}
return 0;
}
方法2:
#include<iostream>
using namespace std;
int main() {
int a,b,c;
double s;
cin>>a>>b>>c; if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){
if(c>a&&c>b) printf("%.1lf",a*b/2.0);
else if(a>b&&a>c) printf("%.1lf", b*c*1.0/2);
else if(b>c&&b>a) printf("%.1lf", s=c*a*1.0/2);
}else cout<<"No";
return 0;
}
题目三:做纸箱最少需要多少面积的硬纸板。
描述
请问做一个尺寸为 a * b * c (单位:厘米)的开口的立方体纸箱(只有一个面是不需要封的,其余5个面都需要封起来,这样算开口的),最少需要多少平方厘米的纸。
输入描述
三个整数:a b c
输出描述
制作该纸箱需要的最少硬纸板的面积,一个整数。
用例输入 1
5 3 4
用例输出 1
74
来源
分支问题
题目分析:
用所有的面积,减去最大的面积,就是所需要的最少的面积
解法一:通过总面积减去最大的面积
#include<iostream>
using namespace std;
int main() {
int a,b,c,s;
cin>>a>>b>>c;
s=2*(a*b+a*c+b*c);
if(a<b && a<c){
cout<<s-b*c;
}else if(b<a && b<c){
cout<<s-a*c;
}else{
cout<<s-a*b;
}
return 0;
}
解法二:用max函数,比较哪个面积最大
#include<iostream>
using namespace std;
int main() {
int a,b,c;
cin>>a>>b>>c;
int s1=a*b;//15
int s2=a*c;//20
int s3=b*c;//12
int max1=max(s1,s2);
max1=max(max1,s3);
cout<<(s1+s2+s3)*2-max1;
return 0;
}
解法三:利用数组和sort排序函数
#include<iostream>
#include<algorithm>
using namespace std;
double a[4];
int main() {
cin >> a[1] >> a[2] >> a[3];
sort(a + 1, a + 4);
cout << 2 * (a[1] * a[2] + a[1] * a[3] + a[2] * a[3]) - a[3] * a[2];
return 0;
}
判断三个整数是否相邻
描述
判断三个整数是否相邻,是输出"TRUE",否则输出"FALSE"。
输入描述
输入只有一行,包括3个整数。
输出描述
输出只有一行。
用例输入 1
1 3 2
用例输出 1
TRUE
提示
三个整数不一定是有序的,例如:1 3 2,是相邻的数!
解法一:逻辑运算符
#include<iostream>
using namespace std;
int main() {
int a,b,c;
cin>>a>>b>>c;
if((a-b==1&&b-c==1)||(b-a==1&&a-c==1)||(b-c==1&&c-a==1)||(c-b==1&&b-c==1)||(a-c==1&&c-b==1)||(c-a==1&&a-b==1))
cout<<"TRUE";
else cout<<"FALSE";
return 0;
}
解法二:数组 sort排序
#include<iostream>
#include<algorithm>
using namespace std;
int a[4];
int main() {
cin >> a[1] >> a[2] >> a[3];
sort(a + 1, a + 4);
if(a[3] - a[2] == 1 && a[2] - a[1] == 1){
cout << "TRUE";
}
else{
cout << "FALSE";
}
return 0;
}
解法三:swap()交换
#include<iostream>
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 - b == 1 && b - a == 1){
cout << "TRUE";
}
else{
cout << "FALSE";
}
return 0;
}
解法4:利用第三个变量
#include<iostream>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
if (a>b) { int t=a; a=b; b=t; }
if (a>c) { int t=a; a=c; c=t; }
if (b>c) { int t=b; b=c; c=t; }
if (a+1==b && b+1==c) cout<<"TRUE\n";
else cout<<"FALSE\n";
return 0;
}