再看到我写的代码突然发现我写的其实都很乱……
【id:12】【20分】B. 实验3-3 比较大小
把这一题打上来是因为这题的想法要知道,而且后面箱子匹配也需要用到他
#include <stdio.h>
int main() {
int a, b, c, f = 0;
scanf("%d %d %d", &a, &b, &c);
//下面用到的想法主要是大的数字往上走,最后出来的顺序就一定会是由大到小
if (a < b) {//将a与b比较,若小则a,b交换值
f = a;
a = b;
b = f;
}
if (a < c) {//将a与c比较,若小则a,c交换值
f = a;
a = c;
c = f;
}
if (b < c) {//将b与c比较,若小则b,c交换值
f = b;
b = c;
c = f;
}
printf("%d->%d->%d", c, b, a);
return 0;
}
【id:53】【20分】D. 三角形判断
这一题需要注意到c中浮点数的比较。
fabs()函数的作用是将数变为绝对值。题目中利用它比较两浮点值是否相等的原理是判断两浮点数之差的绝对值是否小于一个设定的极小的值,如果结果为真的话则判定他们相等。使用fabs()函数需要调用数学库
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c;
scanf("%lf\n%lf\n%lf", &a, &b, &c);
if (a + b - c > 0 && a + c - b > 0 && b + c - a > 0) {
//上面判断三角形是否成立不能用fabs函数!因为结果始终会大于0
if (fabs(a - b) < 0.001 || fabs(a - c) < 0.001 || fabs(b - c) < 0.001) {//判断三边是否有两边相等
if (fabs(a - b) < 0.001 && fabs(b - c) < 0.001 && fabs(a - c) < 0.001) {//判断三边是否全相等
printf("等边三角形");
} else if (fabs(a * a + b * b - c * c) < 0.001 || fabs(a * a + c * c - b * b) < 0.001 || fabs(c * c + b * b - a * a) < 0.001) {//判断是否有满足勾股定理存在
printf("等腰直角三角形");
} else {
printf("等腰三角形");
}
} else {//题目没有提到直角三角形,那么三边全不相等的自然就是普通三角形
printf("普通三角形");
}
} else {
printf("非三角形");
}
return 0;
}
【id:49】【20分】E. 箱子匹配
如何才能确保箱子能匹配呢?这里就要用到B题的思路啦!
如果我们先把输入的两组数字分别从大到小进行排序,那么是不是只需要分别拿两组数字中大中小数来比较是否符合就可以解决啦!
#include <stdio.h>
int main() {
int t = 0;
scanf("%d", &t);
for (int n = 0; n < t; n++) {
int a1, b1, c1, a2, b2, c2, m = 0;//定义m方便下面的排序
scanf("%d %d %d", &a1, &b1, &c1);
scanf("%d %d %d", &a2, &b2, &c2);
//对第一组从大到小排序
if (a1 <= b1) {
m = a1;
a1 = b1;
b1 = m;
}
if (a1 <= c1) {
m = a1;
a1 = c1;
c1 = m;
}
if (b1 <= c1) {
m = b1;
b1 = c1;
c1 = m;
}
//对第二组从大到小排序
if (a2 <= b2) {
m = a2;
a2 = b2;
b2 = m;
}
if (a2 <= c2) {
m = a2;
a2 = c2;
c2 = m;
}
if (b2 <= c2) {
m = b2;
b2 = c2;
c2 = m;
}
//分别对两组中的大中小数比较,判断是否符合匹配条件
if (a2 >= a1 && b2 >= b1 && c2 >= c1 || a1 >= a2 && b1 >= b2 && c1 >= c2) {
printf("yes\n");
} else {
printf("no\n");
}
}
return 0;
}
如果不想写两遍那个排序的话也可以:
#include <stdio.h>
int fact(int *a, int *b, int *c) {
//从大到小排序
int m;
if (*a <= *b) {
m = *a;
*a = *b;
*b = m;
}
if (*a <= *c) {
m = *a;
*a = *c;
*c = m;
}
if (*b <= *c) {
m = *b;
*b = *c;
*c = m;
}
}
int main() {
int t;
scanf("%d", &t);
for (int n = 0; n < t; n++) {
int a1, b1, c1, a2, b2, c2, m = 0;
scanf("%d %d %d", &a1, &b1, &c1);
scanf("%d %d %d", &a2, &b2, &c2);
fact(&a1, &b1, &c1);
fact(&a2, &b2, &c2);
if (a2 >= a1 && b2 >= b1 && c2 >= c1 || a1 >= a2 && b1 >= b2 && c1 >= c2) {
printf("yes\n");
} else {
printf("no\n");
}
}
return 0;
}