我在C#中有一些练习,我遇到了麻烦。
我需要打印一个字母金字塔,根据用户的输入,每个字母都应打印其字母顺序的次数。金字塔的头部将永远是' a'每一行字母都会跳过2。
示例:
输入:g
输出:a
ccc
eeeee
ggggggg
我的尝试出了问题,因为我不知道第一排需要多少空间' a'在金字塔保持完美金字塔之前和之后。
numSpaces = 4 //just for test
for (i = 0; i < numSpaces; i++)
{
printf(" ");
numSpaces--;
}
我猜这是某种空间的循环应该是什么样的,
感谢您的帮助。
答案 0 :(得分:2)
以下代码段将帮助您打印完美的金字塔。重要的逻辑是印刷空间。
int i=0,j=0; char ch='g';
for(i='a';i<=ch;i=i+2){
for(j=(ch-i)/2;j>0;j--){
printf(" ");
}
for(j='a';j<i+1;j++){
printf("%c", i);
}
printf("\n");
}
答案 1 :(得分:1)
您可以使用字符a
开始循环,并使用其ASCII代码作为计数器的开头。根据您的逻辑,计数器在每次迭代中递增2。循环,直到i
小于或等于输入字符的ASCII码。
您必须打印(letter - counter)/2
个空格,然后打印i - 'a' + 1
个字母。
char letter = 'g';
for (int i = 'a'; i <= letter; i += 2)
{
Console.Write(new string(' ', (letter - i)/2));
Console.WriteLine(new string((char) i, i - 'a' + 1));
}
注意:因为i
是从a
开始的,所以i - 'a' + 1
会按字母顺序排列
letter - i
将给出反向位置(基于循环中的最大i
,即letter
)。所以当i - 'a' + 1 == 1
然后letter - i == 6
。并且你必须将它除以2以使其成为金字塔形状。