给定三个矩形 A、B 和 C,由它们的边长给出。需要确定是否可以将它们排列在一个平面上,以便满足两个条件:
1. 矩形的所有边相互平行/垂直;2.rectangle A 内部包含矩形 B 和 C(允许侧面触摸); 允许旋转矩形。 第一行包含六个用空格分隔的正整数:𝑎1、𝑎2、𝑏1、𝑏2、𝑐1、𝑐2。矩形 A 的边长是𝑎1 和𝑎2,矩形B 是𝑏1 和𝑏2,矩形C 是𝑐1 和𝑐2。所有数字不超过100。如果可以按照要求的方式排列矩形,则输出单词YES,否则输出NO。程序有问题。请建议可以做/纠正的事情:)我开始学习C
#include<stdio.h>
int main(){
int a1, a2, b1, b2, c1, c2;
scanf("%d %d %d %d %d %d", &a1, &a2, &b1, &b2, &c1, &c2);
if ((b1<a1)&&(b2<a2)){
if((c1<(a1-b1))&&(c2<(a2-b2))){
printf("YES");
}
if((c1<(a2-b2))&&(c2<(a1-b1))){
printf("YES");
}
else{
printf("NO");
}
}
if ((b1<a2)&&(b2<a1)){
if((c1<(a2-b1))&&(c2<(a1-b2))){
printf("YES");
}
if((c1<(a1-b2))&&(c2<(a2-b1))){
printf("YES");
}
else{
printf("NO");
}
}
else{
printf("NO");
}
}
更正代码时,发生了这样的事情(剧透:当你输入一些数据时,程序仍然没有产生任何东西)
#include<stdio.h>
int main(){
int a1, a2, b1, b2, c1, c2;
scanf("%d %d %d %d %d %d", &a1, &a2, &b1, &b2, &c1, &c2);
if ((b1<=a1)&&(b2<=a2)){
if(((c1<=(a1-b1))&&(c2<=(a2-b2))) || ((c1<=(a2-b2))&&(c2<=(a1-b1)))){
printf("YES");
}
}
else if ((b1<=a2)&&(b2<=a1)){
if(((c1<=(a2-b1))&&(c2<=(a1-b2))) || ((c1<=(a1-b2))&&(c2<=(a2-b1)))){
printf("YES");
}
}
else{
printf("NO");
}
}
经过一夜的折磨和痛苦,这个程序成功地通过了所有测试,并给出了正确的答案:
#include <stdio.h>
int inside(int a1, int a2, int b1, int b2)
{
if(a1>=b1 && a2>=b2)
{
return 1;
}
return 0;
}
int inside_r(int a1, int a2, int b1, int b2)
{
return inside(a1, a2, b1, b2) || inside(a1, a2, b2, b1);
}
int inside_2(int a1, int a2, int b1, int b2, int c1, int c2)
{
int d1, d2;
d1=a1-b1;
d2=a2-b2;
int result=0;
result=result || inside_r(d1, a2, c1, c2) && inside (a1, a2, b1, b2);
result=result || inside_r(a1, d2, c1, c2) && inside (a1, a2, b1, b2);
return result;
}
int inside_2_r(int a1, int a2, int b1, int b2, int c1, int c2)
{
return inside_2(a1, a2, b2, b1, c1, c2) || inside_2(a1, a2, b1, b2, c1, c2);
}
int main()
{
int a1, a2, b2, b1, c1, c2;
scanf ("%d %d %d %d %d %d", &a1, &a2, &b2, &b1, &c1, &c2);
if (inside_2_r(a1, a2, b2, b1, c1, c2))
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}
当你重新编写代码时,这次你忘记打印 NO 以防万一出现不成功的情况
应该是这样的:
但总的来说,算法是不正确的:),应该是这样的:
如果 B 水平放置在 A 中,检查剩余多少可用空间
如果 A 垂直放置在 A 中,检查剩余多少可用空间
从 1) 和 2) 获得的尺寸(为方便起见) min x min
检查指定尺寸 C 是垂直还是水平
那些。代码应该是这样的:
B 在 A 中的每个位置都有 2 个空闲位置(最多):
可能我写的太多了:)
在您的情况下,它说:
为什么要使用严格的不等式
<
,>
什么时候应该不严格<=
,>=
好吧,第二个也是更重要的错误:
得到一些结果后 - 停止工作(返回做),否则得到以下结果:
代码应改写为形式
最后,正确的程序变成了这样: