在 C 中打印此特定三角形图案的最佳方式/方法是什么?
What is the best way / approach to printing this specific triangle pattern in C?
目标是在调用 printTriangle(7);
:
时打印这个
+
++
+-+
+--+
+---+
+----+
+++++++
到目前为止,这是我的方法:
int printTriangle(int height)
{
int x, i, j, space;
space = height-1;
for(x=0; x<=height; x++)
{
for(j=0; j<=space; j++)
{
printf(" ");
}
space--;
for(i=0; i<x; i++)
{
printf("+");
}
printf("\n");
}
return 0;
}
它打印这个:
+
++
+++
++++
+++++
++++++
+++++++
我似乎无法找到一种方法来使“-”的内部三角形的条件正确,任何人都可以引导我朝着正确的方向前进吗?
将此添加到第二个 For 循环:
if(i==0||i==x-1)
printf("+");
else
printf("-");
你可以看看here
你总是需要至少打印一个+,所以你可以把第一个跳出循环,无条件打印。在此之后,您希望在循环的第一次和最后一次迭代中打印 +。第一次迭代将是 i=0。由于循环迭代直到 i
int printTriangleFor(int height)
{
int x, i, j, space;
space = height-1;
for(x=0; x<=height; x++)
{
for(j=0; j<=space; j++)
{
printf(" ");
}
space--;
for(i=0; i<x; i++)
{
if ((i==0) || (i == x-1)) {
printf("+");
} else {
printf("-");
}
}
printf("\n");
}
return 0;
}
另外,请注意您的程序在外循环的第一次迭代中打印了一行空空格。不确定是否需要这样做。
anyone can lead me in the right direction?
首先我们需要索引系统。您已经有了索引 - x
和 i
是循环迭代器,x
索引从 1
到 height
的行,i
索引 +
/-
每行中从 0
到 x - 1
的字符。
x| for(x=0; x<=height; x++)
0|
1| +
2| ++
3| +-+
4| +--+
5| +---+
6| +----+
7v +++++++
i----0123456--> for(i=0; i<x; i++)
所以首先尝试用词来制定条件,然后将它们转化为索引。例如,我们应该打印 +
:
- 前两行 -
x < 2
- 在最后一行 -
x == height
- 行中的第一个字符 -
i == 0
- 行中的最后一个字符 -
i == (x - 1)
在所有其他地方我们应该打印-
。你可以试一下“we should print -
, when ...”,也许对你来说会更容易想象。然后它在条件之间找到合适的 &&
和 ||
。总计:
for(i=0; i<x; i++) {
if (x < 2 || x == height || i == 0 || i == (x - 1))
printf("+");
else
printf("-");
}
printf("\n");
#include <stdio.h>
int main(){
int i, j, h=7;
for(i=1; i<=h; i++){
for(j=i; j<h; j++){
printf(" ");
}
for(j=1; j<=i; j++){
if(i==h || j==1 || j==i){
printf("+");
}
else{
printf("-");
}
}
printf("\n");
}
}
我给你我的解决方案,最接近 code golfing:
x,i,j;void f(int h){for(x=0;x<=h;x++){for(j=i;j<h;j++)printf(" "); \
for(i=0;i<x;i++)printf("%c",45-2*(!i||i==x-1||x==h));printf("\n");}}
int main(void) {
f(8);
}
注意:希望您不要介意缺乏可读性
目标是在调用 printTriangle(7);
:
+
++
+-+
+--+
+---+
+----+
+++++++
到目前为止,这是我的方法:
int printTriangle(int height)
{
int x, i, j, space;
space = height-1;
for(x=0; x<=height; x++)
{
for(j=0; j<=space; j++)
{
printf(" ");
}
space--;
for(i=0; i<x; i++)
{
printf("+");
}
printf("\n");
}
return 0;
}
它打印这个:
+
++
+++
++++
+++++
++++++
+++++++
我似乎无法找到一种方法来使“-”的内部三角形的条件正确,任何人都可以引导我朝着正确的方向前进吗?
将此添加到第二个 For 循环:
if(i==0||i==x-1)
printf("+");
else
printf("-");
你可以看看here
你总是需要至少打印一个+,所以你可以把第一个跳出循环,无条件打印。在此之后,您希望在循环的第一次和最后一次迭代中打印 +。第一次迭代将是 i=0。由于循环迭代直到 i 另外,请注意您的程序在外循环的第一次迭代中打印了一行空空格。不确定是否需要这样做。int printTriangleFor(int height)
{
int x, i, j, space;
space = height-1;
for(x=0; x<=height; x++)
{
for(j=0; j<=space; j++)
{
printf(" ");
}
space--;
for(i=0; i<x; i++)
{
if ((i==0) || (i == x-1)) {
printf("+");
} else {
printf("-");
}
}
printf("\n");
}
return 0;
}
anyone can lead me in the right direction?
首先我们需要索引系统。您已经有了索引 - x
和 i
是循环迭代器,x
索引从 1
到 height
的行,i
索引 +
/-
每行中从 0
到 x - 1
的字符。
x| for(x=0; x<=height; x++)
0|
1| +
2| ++
3| +-+
4| +--+
5| +---+
6| +----+
7v +++++++
i----0123456--> for(i=0; i<x; i++)
所以首先尝试用词来制定条件,然后将它们转化为索引。例如,我们应该打印 +
:
- 前两行 -
x < 2
- 在最后一行 -
x == height
- 行中的第一个字符 -
i == 0
- 行中的最后一个字符 -
i == (x - 1)
在所有其他地方我们应该打印-
。你可以试一下“we should print -
, when ...”,也许对你来说会更容易想象。然后它在条件之间找到合适的 &&
和 ||
。总计:
for(i=0; i<x; i++) {
if (x < 2 || x == height || i == 0 || i == (x - 1))
printf("+");
else
printf("-");
}
printf("\n");
#include <stdio.h>
int main(){
int i, j, h=7;
for(i=1; i<=h; i++){
for(j=i; j<h; j++){
printf(" ");
}
for(j=1; j<=i; j++){
if(i==h || j==1 || j==i){
printf("+");
}
else{
printf("-");
}
}
printf("\n");
}
}
我给你我的解决方案,最接近 code golfing:
x,i,j;void f(int h){for(x=0;x<=h;x++){for(j=i;j<h;j++)printf(" "); \
for(i=0;i<x;i++)printf("%c",45-2*(!i||i==x-1||x==h));printf("\n");}}
int main(void) {
f(8);
}
注意:希望您不要介意缺乏可读性