基于输入C#的字母金字塔

时间:2015-11-28 15:18:26

标签: c#

我在C#中有一些练习,我遇到了麻烦。

我需要打印一个字母金字塔,根据用户的输入,每个字母都应打印其字母顺序的次数。金字塔的头部将永远是' a'每一行字母都会跳过2。

示例:

输入:g

输出:a ccc eeeee ggggggg

我的尝试出了问题,因为我不知道第一排需要多少空间' a'在金字塔保持完美金字塔之前和之后。

numSpaces = 4 //just for test
    for (i = 0; i < numSpaces; i++)
    {
        printf(" ");
        numSpaces--;
    }

我猜这是某种空间的循环应该是什么样的,

感谢您的帮助。

2 个答案:

答案 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以使其成为金字塔形状。