Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 用Java输出Union-Jack-like-ASCII-Art_Algorithm_Ascii - Fatal编程技术网

Algorithm 用Java输出Union-Jack-like-ASCII-Art

Algorithm 用Java输出Union-Jack-like-ASCII-Art,algorithm,ascii,Algorithm,Ascii,我被指派编写一个算法输出代码(用简单的ASCII码,没有花哨的图形),对于给定的K,一个KxK正方形,对称线为x,其他东西为o。如果K是偶数,我们用两条x’s线来标记水平和垂直对称线。此外,我们不能在整个源代码中使用两个以上的循环 所以我有两个想法。第一个是分析每个点应该满足的坐标-每个点都应该有一个方程,告诉我们给定的(Kx,Ky)点是x还是o。我们把它放在一些if和just while的交替中,通过所有可能的(Kx,Ky)循环,将一些点标记为x,其他点标记为y。这需要一个循环 另一个想法是,

我被指派编写一个算法输出代码(用简单的ASCII码,没有花哨的图形),对于给定的K,一个KxK正方形,对称线为x,其他东西为o。如果K是偶数,我们用两条x’s线来标记水平和垂直对称线。此外,我们不能在整个源代码中使用两个以上的循环

所以我有两个想法。第一个是分析每个点应该满足的坐标-每个点都应该有一个方程,告诉我们给定的(Kx,Ky)点是x还是o。我们把它放在一些if和just while的交替中,通过所有可能的(Kx,Ky)循环,将一些点标记为x,其他点标记为y。这需要一个循环

另一个想法是,使用蛮力,但不让我们分析所有的点,即使用一组变量来连接字符串。让我解释一下:我们有一个while循环来检查“height”变量(每转一圈,我们将其减量1),在这个循环中,我们使用一个由一个while循环组成的repeatString的自定义方法(它只是将字符串乘以给定的t倍)。所以我们有这样的东西:

while(height):
if height==maxHeight OR ==0: print repeatString("x", maxWidth)
else if height is an element of markedKy (an array telling us which Ky's to mark as x'es as the whole): print repearString("x", maxWidth)
else print "x"+(howManySpaces*" ")+"x" ["xx" if even] + (howManySpaces*" ") +"x"
……等等。我上面写的内容当然非常松散,没有涵盖很多情况(事实上,它涉及的情况相当多),但我认为这可能会使我的概念不那么混乱。然而,第二种方法对代码来说将是一个真正的痛苦——我现在可以看出它是多么容易出现错误


有第三种,最好的方法吗?我对这件事感到头疼,虽然它看起来很简单,但我想不出还有什么别的办法。

我只用一个循环就可以做到…;-)

输入K
一半=K/2,平方=K*K
对于像素=0;像素<正方形++像素
水平方向:=像素%K,垂直方向:=像素/K
如果水平=垂直或水平+垂直+1=K//对角线
或horiz=half或horiz=K-1-half//中间垂直线
或vert=half或vert=K-1-half//中间水平线
输出“x”
否则,如果应为O(水平+1,垂直+1)
输出“o”
其他的
输出“”
如果horiz=K-1//如果不想要最后一个下线,则添加“和顶点
请不要使用
家庭作业
标签,它正在被淘汰哦,我明白了。对不起,谢谢:)o是如何确定的?它们不能简单地填充所有不应该是“x”的空间,因为我看到你也有“s”。。。
input K
half := K / 2 , square := K * K
for pixel = 0; pixel < square; ++pixel
    horiz := pixel % K , vert := pixel / K
    if horiz = vert or horiz + vert + 1 = K // the diagonals
            or horiz = half or horiz = K - 1 - half // the middle vertical line(s)
            or vert = half or vert = K - 1 - half // the middle horizontal line(s)
        output "x"
    else if ShouldBeO(horiz + 1, vert + 1)
        output "o"
    else
        output " "
    if horiz = K - 1 // add "and vert < K - 1" if you don't want the last EOL
        output EndOfLine
end for