gpt4 book ai didi

c - C 中的星形图案

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:05:01 26 4
gpt4 key购买 nike

我正在尝试解决这个问题,用户的输入是星星的最大长度.. 例如

enter image description here
该图像用于输入 11 和 12
enter image description here

其他模式示例

(9) 1-5-9-5-9-5-1
(11) 1-5-9-11-9-11-9-5-1
(12) 2-6-10-12-10-12-10-6-2
(16) 2-6-10-14-16-14-10-14-16-14-10-6-2

如果数字是奇数,星星从一颗开始,每行增加四颗,但是当增量大于最大长度时,只增加两颗。如果数字是偶数,星星从两颗开始,但是遵循相同的递增方式。

所以,我尝试做的是先处理第一个上半部分,然后再镜像它,这里是我的代码,仅适用于奇数,计划在此之后处理偶数

#include <stdio.h>

int main(){
int stars, spaces, maxlen, rows;
int spac=0, star=1;
scanf("%d", &maxlen);

for (rows=1;rows<=maxlen;rows++){
for(spaces=1; spaces<=(maxlen/2)-spac; spaces++){
printf(" ");
}

for(stars=1; stars<=star; stars++){
printf("*");
}

printf("\n");

if (star>=maxlen)
break;

if (star==9)
star += 2;
else
star += 4;

spac+=2;
}

return 0;
}

代码适用于 1、9、11,但是当我从 13+ 输入时出现问题,它没有给我预期的结果...

任何帮助我如何解决这个问题,我将感谢对我的方法的评论,这是一个好的方法还是我应该学习另一种解决模式的方法,以更轻松地解决这种不规则模式?

最佳答案

正如我看到的图案,有两个重叠的*符号正方形,边缘经过修剪,超出了线的长度(最长的线只比前一行多两个*)第二件事是不确定这两个方 block 有多远。

我是这样写的:

#include <stdio.h>

#define OVERLAPP 1

int linesCount(int maxlen)
{
return maxlen + maxlen%2 + (OVERLAPP);
}

int get_stars(int maxlen, int line)
{
if (2 * line > linesCount(maxlen))
{
return get_stars(maxlen, linesCount(maxlen) - line - 1);
}
else
{
int stars;
stars = 2 - maxlen%2;
stars += 4 * line;
if (stars > maxlen)
{
if (stars - maxlen < 3)
{
stars = maxlen;
}
else
{
stars = 2 * maxlen - stars + 4;
}
}
return stars;
}
}

int main(int argc, char **argv)
{
int maxlen;
int maxlines;
int line;
int column;
int current_stars;

scanf("%d", &maxlen);
maxlines = linesCount(maxlen);

for(line = 0; line < maxlines; line++)
{
current_stars = get_stars(maxlen, line);
for(column = 0; 2 * column + 1 < maxlen - current_stars; column++)
{
printf(" ");
}
for(column = 0; column < current_stars; column++)
{
printf("*");
}
for(column = 0; 2 * column + 1 < maxlen - current_stars; column++)
{
printf(" ");
}
printf(" %d\n", current_stars);
}

}

结果如下:

gcc golf.c; seq 20 | xargs -I num echo "echo;echo "--------num---------";echo; echo num | ./a.exe" | bash

--------1---------

* 1
* 1
* 1

--------2---------

** 2
** 2
** 2

--------3---------

* 1
*** 3
* 1
*** 3
* 1

--------4---------

** 2
**** 4
** 2
**** 4
** 2

--------5---------

* 1
***** 5
***** 5
* 1
***** 5
***** 5
* 1

--------6---------

** 2
****** 6
****** 6
** 2
****** 6
****** 6
** 2

--------7---------

* 1
***** 5
******* 7
***** 5
* 1
***** 5
******* 7
***** 5
* 1

--------8---------

** 2
****** 6
******** 8
****** 6
** 2
****** 6
******** 8
****** 6
** 2

--------9---------

* 1
***** 5
********* 9
********* 9
***** 5
* 1
***** 5
********* 9
********* 9
***** 5
* 1

--------10---------

** 2
****** 6
********** 10
********** 10
****** 6
** 2
****** 6
********** 10
********** 10
****** 6
** 2

--------11---------

* 1
***** 5
********* 9
*********** 11
********* 9
***** 5
* 1
***** 5
********* 9
*********** 11
********* 9
***** 5
* 1

--------12---------

** 2
****** 6
********** 10
************ 12
********** 10
****** 6
** 2
****** 6
********** 10
************ 12
********** 10
****** 6
** 2

--------13---------

* 1
***** 5
********* 9
************* 13
************* 13
********* 9
***** 5
* 1
***** 5
********* 9
************* 13
************* 13
********* 9
***** 5
* 1

--------14---------

** 2
****** 6
********** 10
************** 14
************** 14
********** 10
****** 6
** 2
****** 6
********** 10
************** 14
************** 14
********** 10
****** 6
** 2

--------15---------

* 1
***** 5
********* 9
************* 13
*************** 15
************* 13
********* 9
***** 5
* 1
***** 5
********* 9
************* 13
*************** 15
************* 13
********* 9
***** 5
* 1

--------16---------

** 2
****** 6
********** 10
************** 14
**************** 16
************** 14
********** 10
****** 6
** 2
****** 6
********** 10
************** 14
**************** 16
************** 14
********** 10
****** 6
** 2

--------17---------

* 1
***** 5
********* 9
************* 13
***************** 17
***************** 17
************* 13
********* 9
***** 5
* 1
***** 5
********* 9
************* 13
***************** 17
***************** 17
************* 13
********* 9
***** 5
* 1

--------18---------

** 2
****** 6
********** 10
************** 14
****************** 18
****************** 18
************** 14
********** 10
****** 6
** 2
****** 6
********** 10
************** 14
****************** 18
****************** 18
************** 14
********** 10
****** 6
** 2

--------19---------

* 1
***** 5
********* 9
************* 13
***************** 17
******************* 19
***************** 17
************* 13
********* 9
***** 5
* 1
***** 5
********* 9
************* 13
***************** 17
******************* 19
***************** 17
************* 13
********* 9
***** 5
* 1

--------20---------

** 2
****** 6
********** 10
************** 14
****************** 18
******************** 20
****************** 18
************** 14
********** 10
****** 6
** 2
****** 6
********** 10
************** 14
****************** 18
******************** 20
****************** 18
************** 14
********** 10
****** 6
** 2

关于c - C 中的星形图案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26343889/

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