我正在尝试解决这个问题,用户的输入是星星的最大长度.. 例如
该图像用于输入 11 和 12
其他模式示例
(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/