你好,我是c ++的初学者
以前从未使用过旗帜,我被告知我可以使用旗帜:
我需要使用标记编码填充此形状
这里是代码:
#include <iostream>
using namespace std;
int polygon[10][10] =
{
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,2,2,2,2,1,1,1},
{1,1,1,2,1,1,2,1,1,1},
{1,2,2,2,1,1,2,2,2,1},
{1,2,1,1,1,1,1,1,2,1},
{1,2,1,1,1,1,1,1,2,1},
{1,2,1,1,1,1,1,1,2,1},
{1,2,1,1,1,1,1,1,2,1},
{1,2,2,2,2,2,2,2,2,1},
{1,1,1,1,1,1,1,1,1,1},
};
int main()
{
int row,column;
char c='y';
for (int row = 0; row<10; row++)
{
for (int column=0; column <10; column++)
{
if(polygon[row][column]==1) cout << " ";
else if(polygon[row][column]==2)
{
cout << "+";
}
else
cout << " ";
}
cout << "\n";
}
system("pause");
}
此代码将打印出带顶部的方形形状 关于如何使用标志编码填写此形状的任何想法
例如在数组中我可以像 如果行和列到达前2,它将开始用0填充形状,当它遇到另一侧的另外2时,它停止并开始一个新行 直到形状充满
我不知道如何在这里使用旗帜我只知道概念
任何人都可以帮忙吗
while( polygon[row][column] == 2)
{
row+=0;
if (row == 2)
{
// in this part i need to go to the next line
}
}
我的朋友给了我一些做这样的事情的提示,以填补形状,但我没有完全得到她
答案 0 :(得分:0)
你可以做的是有一面旗帜上写着“我是谁?”。每次遇到形状边框时都需要打开此标志,如果它打开并且遇到另一个边框则将其关闭。
编辑:
水平边框是一项挑战。真正知道使用常规扫描的唯一方法是扫描直到行的结尾,并且只有在有另一个边框的情况下,你才有形状。
如果您可以假设遇到的第一个边框是水平的,则更容易,但识别底部水平边框仍然存在问题。
您可以通过首先从顶部扫描,找到带边框的第一行来解决这个问题。现在你可以知道那条线上没有“形状”区域。你可以从底部扫描找到带边框的最后一行。现在你可以知道这条线没有“形状”区域。剩下的就是用之前建议的算法在这两行之间进行扫描。
答案 1 :(得分:0)
假设画布必须包含一个简单的闭合多边形,你可以做什么:从边框,将所有外部字段更改为“3”,将它们“标记”为外部字段:
- start at a corner and go round the edges (assuming polygon can be on the edge).
is the field 1?
- make it a 3.
- repeat this for all (not diagonal) neighbouring fields in a recursive way.
- when printing, use a different character for
- 1 (inside)
- 2 (border)
- other (outside)
答案 2 :(得分:0)
在编程中,术语“标志”通常用布尔类型表示。编程意义上的标志就像一个开关,它可以是(真)或关(假)。我注意到你的形状由1
和2
组成,并且只能猜测你的朋友建议你使用“标记编码”时它们意味着你使用的是bool
数据类型。或者,在C ++中,0
将在条件中评估为false
(if (0)
与if (false)
相同),而不是1
和2
您可以使用0
代表1
(意思是“不是形状的一部分”)和1
代替2
(意思是“形状的一部分”)。
从这里开始,您的比较会更简单一些,而不是if (polygon[row][column] == 2)
您可以编写if (polygon[row][column])
,如果polygon[row][column]
的值不为零,则只会评估为真。 / p>