打印空的星号三角形 c
print empty asterisk triangle c
所以我查了一下,只发现了正常的三角形问题。
这个有点棘手。
Given a N, your program should create an asterisk unfilled triangle with a N side size.
Example 1
Inform N: 1
*
Example 2:
Inform N: 2
**
*
Example 3:
Inform N: 3
***
**
*
Example 4:
Inform N: 4
****
* *
**
*
Example 5:
Inform N: 5
*****
* *
* *
**
*
这是我的尝试,我只能低效地制作一个实心三角形
void q39(){
int n,i,b;
printf("Inform N: ");
scanf ("%i",&n);
for ( i = 0; i < n; ++i)
{
printf("*");
for ( b = 1; b < n; ++b)
{
if (i==0)
{
printf("*");
}
else if (i==1 && b>1)
{
printf("*");
}
else if (i==2 && b>2)
{
printf("*");
}
else if(i==3 && b>3){
printf("*");
}
else if(i==4 && b>4){
printf("*");
}
else if(i==5 && b>5){
printf("*");
}
else if(i==6 && b>6){
printf("*");
}
else if(i==7 && b>7){
printf("*");
}
else if (i==8 && b>8){
printf("*");
}
}
printf("\n");
}
}
我只是为您提供一个逻辑,您可以根据它进行操作。
你可以走三个循环。一个代表行说 i ,第二个代表 * (星号)说 j ,第三个代表白色 spaces (空三角形)说 k 。现在,我希望您知道如何使用 i,j 制作三角形。
k 的逻辑可能是它应该比行循环(即第 j 个循环)少执行 1,并且应该打印空白 space(" ")。
你可以像这样在模块中划分你的问题
print_asterisk(n);
print_hollow_asterisk();
print_asterisk(1);
你需要考虑打印三角形的算法。您(可能)需要绘制三种不同类型的线条:
- 一行满N个星号
- 一行开头有一个星号,结尾有一个星号,中间有 N-2 个空格。
- 一行有 1 个星号(这只是 #1 的子集)。
第 1 步 - 找出如何打印出以上行
第 2 步 - 算出何时打印出以上行
此问题的较长版本,可以进行大量优化
void print_start_and_end_asterix( int n )
{
int i = 0;
for ( ; i < n ; i ++ )
{
if( i == 0 || i == n-1 )
printf("*");
else
printf(" ");
}
printf("\n");
}
void print_full_row( int n )
{
int i = 0;
for ( ; i < n ; i ++ )
printf("*");
printf("\n");
}
int main (){
int n;
scanf("%d", &n);
int row = 0 , col = n;
for ( row = 0 ; row < n ; row ++ , col--) {
if( row == 0 )
print_full_row(col);
else
print_start_and_end_asterix(col);
}
return 0;
}
绘制的三角形是一个二维图形,因此可以用两个嵌套的for
循环来绘制。外循环跟踪正在绘制的行。内部循环跟踪该列。对于 row
和 col
的每个组合,必须做出一个非常简单的决定,我们是输出一个星号,还是输出一个 space.
从外循环开始。外循环从 N 倒数到 1 是有意义的,因为一行中的字符数从 N 开始递减直到达到 1。所以外循环是
for ( row = N; row >= 1; row-- )
接下来是内循环。内循环需要计算每一行的字符数。我们已经安排好外层循环中的 row
变量等于字符数。因此,内循环就是
for ( col = 0; col < row; col++ )
现在我们做出决定。给定一个 row
和一个 col
,我们应该打印星号还是 space?好吧,我们应该总是在第一行打印一个星号,也就是 row == N
。我们还应该在左边缘打印一个星号,其中 col == 0
。最后,我们需要在右边缘添加一个星号,其中 col == row-1
。因此,决策代码是
if ( row == N || col == 0 || col == row-1 ) // top or left or right
putchar( '*' );
else
putchar( ' ' );
最后,当内层循环结束后,我们需要输出一个换行符作为下一行的开始
putchar( '\n' );
仅此而已。
你只需要认为第一行应该填写 *
.
第二件事是每行的第一个字符应该是 *
.
最后一个字符也应该是 *
。在两者之间你需要填写 spaces.
int main()
{
int n=6;
for(int i=n-1;i>=0;i--) // using n-1, bcz loop is running upto 0
{
for(int j=0;j<=i;j++)
{
if(i==n-1 || j==0 ||i==j)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
条件if(i==n-1 || j==0 ||i==j)
这里使用 i==n-1
以便第一行应该填充 *
.
j==0
用于使每行的第一个字符 *
。每次新行开始时,即 j=0 它将打印一个 *
字符。
i==j
这用于使最后一个字符 *
当 i==j 是我们正在 运行ning 循环的最后一个索引。所以最后索引它会打印一个 *
.
对于所有其他值,它将打印 space ,因为它会 运行 else
condition.
输出
******
* *
* *
* *
**
*
所以我查了一下,只发现了正常的三角形问题。 这个有点棘手。
Given a N, your program should create an asterisk unfilled triangle with a N side size.
Example 1
Inform N: 1
*
Example 2:
Inform N: 2
**
*
Example 3:
Inform N: 3
***
**
*
Example 4:
Inform N: 4
****
* *
**
*
Example 5:
Inform N: 5
*****
* *
* *
**
*
这是我的尝试,我只能低效地制作一个实心三角形
void q39(){
int n,i,b;
printf("Inform N: ");
scanf ("%i",&n);
for ( i = 0; i < n; ++i)
{
printf("*");
for ( b = 1; b < n; ++b)
{
if (i==0)
{
printf("*");
}
else if (i==1 && b>1)
{
printf("*");
}
else if (i==2 && b>2)
{
printf("*");
}
else if(i==3 && b>3){
printf("*");
}
else if(i==4 && b>4){
printf("*");
}
else if(i==5 && b>5){
printf("*");
}
else if(i==6 && b>6){
printf("*");
}
else if(i==7 && b>7){
printf("*");
}
else if (i==8 && b>8){
printf("*");
}
}
printf("\n");
}
}
我只是为您提供一个逻辑,您可以根据它进行操作。 你可以走三个循环。一个代表行说 i ,第二个代表 * (星号)说 j ,第三个代表白色 spaces (空三角形)说 k 。现在,我希望您知道如何使用 i,j 制作三角形。 k 的逻辑可能是它应该比行循环(即第 j 个循环)少执行 1,并且应该打印空白 space(" ")。
你可以像这样在模块中划分你的问题
print_asterisk(n);
print_hollow_asterisk();
print_asterisk(1);
你需要考虑打印三角形的算法。您(可能)需要绘制三种不同类型的线条:
- 一行满N个星号
- 一行开头有一个星号,结尾有一个星号,中间有 N-2 个空格。
- 一行有 1 个星号(这只是 #1 的子集)。
第 1 步 - 找出如何打印出以上行
第 2 步 - 算出何时打印出以上行
此问题的较长版本,可以进行大量优化
void print_start_and_end_asterix( int n )
{
int i = 0;
for ( ; i < n ; i ++ )
{
if( i == 0 || i == n-1 )
printf("*");
else
printf(" ");
}
printf("\n");
}
void print_full_row( int n )
{
int i = 0;
for ( ; i < n ; i ++ )
printf("*");
printf("\n");
}
int main (){
int n;
scanf("%d", &n);
int row = 0 , col = n;
for ( row = 0 ; row < n ; row ++ , col--) {
if( row == 0 )
print_full_row(col);
else
print_start_and_end_asterix(col);
}
return 0;
}
绘制的三角形是一个二维图形,因此可以用两个嵌套的for
循环来绘制。外循环跟踪正在绘制的行。内部循环跟踪该列。对于 row
和 col
的每个组合,必须做出一个非常简单的决定,我们是输出一个星号,还是输出一个 space.
从外循环开始。外循环从 N 倒数到 1 是有意义的,因为一行中的字符数从 N 开始递减直到达到 1。所以外循环是
for ( row = N; row >= 1; row-- )
接下来是内循环。内循环需要计算每一行的字符数。我们已经安排好外层循环中的 row
变量等于字符数。因此,内循环就是
for ( col = 0; col < row; col++ )
现在我们做出决定。给定一个 row
和一个 col
,我们应该打印星号还是 space?好吧,我们应该总是在第一行打印一个星号,也就是 row == N
。我们还应该在左边缘打印一个星号,其中 col == 0
。最后,我们需要在右边缘添加一个星号,其中 col == row-1
。因此,决策代码是
if ( row == N || col == 0 || col == row-1 ) // top or left or right
putchar( '*' );
else
putchar( ' ' );
最后,当内层循环结束后,我们需要输出一个换行符作为下一行的开始
putchar( '\n' );
仅此而已。
你只需要认为第一行应该填写 *
.
第二件事是每行的第一个字符应该是 *
.
最后一个字符也应该是 *
。在两者之间你需要填写 spaces.
int main()
{
int n=6;
for(int i=n-1;i>=0;i--) // using n-1, bcz loop is running upto 0
{
for(int j=0;j<=i;j++)
{
if(i==n-1 || j==0 ||i==j)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
条件if(i==n-1 || j==0 ||i==j)
这里使用 i==n-1
以便第一行应该填充 *
.
j==0
用于使每行的第一个字符 *
。每次新行开始时,即 j=0 它将打印一个 *
字符。
i==j
这用于使最后一个字符 *
当 i==j 是我们正在 运行ning 循环的最后一个索引。所以最后索引它会打印一个 *
.
对于所有其他值,它将打印 space ,因为它会 运行 else
condition.
输出
******
* *
* *
* *
**
*