gpt4 book ai didi

c - 绘制带星号的三角形 int 时出现问题

转载 作者:行者123 更新时间:2023-11-30 18:27:12 25 4
gpt4 key购买 nike

我想询问一个类(class)项目,我不明白为什么它不起作用。目标是在以下条件下打印蜘蛛网状的六边形:

  • 每个水平边都必须打印为“星号,空格,星号”,因此星号空格以及双空格打印必须是双倍的。

  • 六边形之外剩余的空间必须是单个的。

它应该是什么样子:

images of correct output

问题在于,当变量k的条件出现时,右侧打印是错误的。你可以帮帮我吗?这是我的代码。

#include <stdio.h>

int main()
{
int lado, i=0, j=0, k, l; //k and l represent the spaces but whenever they are coincident with j they should print an asterisk and a space. j is a variable to find coincidences for printing asterisks
printf("Spiderman, que tamano de telarana deseas:\n");
scanf("%d",&lado);

//for the high half
for( i=1, k=lado,l=(2*lado)-1 ; i<=lado;i++,k--, l++){

for( j=1;j<(3*lado)-1; j++){

if((j<k||j>l)){
printf(" ");
}else if((i == 1 && j >= k && j <= l )||(i == lado && j >= k && j <= l )) {
printf("* ");
}else if((i!=1 && j==k && i!=lado)||(i!=1 && j==l && i!=lado)) {
printf("* ");
}else if((j==((2*lado)-i))||((j==(lado-1)+(i-1)))){ //el que rula guay es el 1
printf("* ");

}else
printf(" ");
}

printf("\n");
}
//for creating the low half of the hexagon
for( int i2=1, k2=2,l2=(3*lado)-3 ; i2<lado;i2++,k2++, l2--){
for( int j2=1;j2<(3*lado)-1; j2++){

if(j2<k2 || j2>l2){
printf(" ");
}else if(i2 == (lado)-1 && j2 >= k2 && j2 <= l2 ) {
printf("* ");
}else if((j2==k2)||(j2==l2)) {
printf("* ");
}else if (j2==((2*lado)-1-i2)) {
printf("* ");
}else if(j==((lado)+i2)){
printf("* ");
}else
printf(" ");
}
printf("\n");
}
}

附注“lado”在西类牙语中的意思是“侧面”,是的,这个项目是关于复仇者联盟的,哈哈。

最佳答案

这是一个更简单的版本,允许侧面有奇数和偶数的星星。

基本思想是绘图在水平和垂直方向上完全对称,因此我们只需要考虑一个象限。在下面的代码中,每打印一行,i 就加 1,每打印一个字符,j 就加 1。这些评论应该让您了解每个阶段发生的情况。

void print_hexagonal_web (int lado)
{
int i, j, full_i, full_j;
int size = lado - 1;
for (full_j = -size; full_j <= size; ++full_j)
{
j = full_j >= 0 ? full_j : -full_j; // abs(full_j)
for (full_i = -2*size; full_i <= 2*size; ++full_i)
{
i = full_i >= 0 ? full_i : -full_i; // abs(full_i)
bool star = false;
if (j == 0)
star = i % 2 == 0;
else if (j == i) // on a diagonal line
star = true;
else if (j < i) // below diagonal lines
star = j <= 2*size-i && (2*size-i-j) % 4 == 0;
else // between the diagonal lines
star = j % 2 == size % 2 && i % 2 == size % 2;
printf("%c", star ? '*' : ' ');
}
printf("\n");
}
}

lado == 8 的输出:

       * * * * * * * *       
* * * *
* * * * * * * *
* * * * * *
* * * * * * * *
* * * * * * * *
* * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * *
* * * * * * * *
* * * * * * * *
* * * * * *
* * * * * * * *
* * * *
* * * * * * * *

lado == 9 的输出:

        * * * * * * * * *        
* * * *
* * * * * * * * *
* * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * *
* * * * * * * * *
* * * *
* * * * * * * * *

更新:abs(full_j) 和 abs(full_i) 的拼写错误、缺少括号、局部变量声明、full_i 的范围应从 -2*size 到 2*size

关于c - 绘制带星号的三角形 int 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58651782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com