我必须为给定的一组输入值开发一个C程序,我们通过指定一个起点和四个基本方向上的一系列运动来描述矩形图形的边界,就好像我们沿着它的边界绕着形成一样。
我们进入每个移动方向(WESN)和长度-“W3”意味着从当前位置向西移动三步(左)。

图1中的数字可以从右上角开始描述为:
“W6,S2,W3,S2,E1,S2,E2,N1,W2,N1,E3,S3,E1,N5”
我的问题是:
谢谢。
发布于 2021-04-15 20:53:09
这个形状叫做多米诺。这是多边形的特例。
从(0,0)点开始,用0区域的一个多边形来解决求面积的问题。下一步,在水平移动时,按矩形扩展该区域。
假设当前点是(x,y)。通过d单元向东移动意味着在(x,0) -> (x,y) -> (x + d, y) -> (x + d, 0)点添加一个矩形。矩形的面积是d * y。当向西移动时,需要减去矩形。

如果行走是顺时针的,则最后的区域是正的,如果路径是逆时针的,则是负的。
这种方法的结果是一个非常简单的程序:
#include <stdio.h>
int main() {
int x = 0, y = 0, A = 0, d;
int c;
while ((c = getchar()) != EOF) {
if (c == 'W' && scanf(" %d", &d) == 1) {
x += d;
A += d * y;
} else if (c == 'E' && scanf(" %d", &d) == 1) {
x -= d;
A -= d * y;
} else if (c == 'N' && scanf(" %d", &d) == 1) {
y += d;
} else if (c == 'S' && scanf(" %d", &d) == 1) {
y -= d;
}
}
if (A < 0) A = -A;
printf("%d\n", A);
return 0;
}对于问题的输入,给出了33的预期答案。
https://stackoverflow.com/questions/67114437
复制相似问题