2013-05-04 167 views
2

我想用C来写一个程序,给出了下面的输出13排金字塔(注意字母的模式,即BCB):印刷字母金字塔

​​

这里是我的尝试在该解决方案:

#include <stdio.h> 
#include <stdlib.h> 


int main(void){ 

    char c = 'A'; 
    int height = 13; 
    int max = 1; 
    for (int i = 1; i <= height; i++){ 
     //int j = 1; 
     for (int k = 0; k < height - i; k++) 
      printf(" "); // print space on left 
     for (int j = 1; j <= max; j++){ 
      if (j <= max/2){ // print left side of pyramid 
       printf ("%c", c); 
       c = (c - 'A' + 1) % 26 + 'A'; 
      } 
      else{ // print right side of pyramid 
      printf ("%c", c); 
      c = (c -'A' + 25) % 26 + 'A'; 
      } 
     } 
     printf("\n"); 
     max += 2; 
    } 

} 

但是它提供了以下不正确的输出:

  A 
      ZAZ 
      YZAZY 
     XYZAZYX 
     WXYZAZYXW 
     VWXYZAZYXWV 
     UVWXYZAZYXWVU 
    TUVWXYZAZYXWVUT 
    STUVWXYZAZYXWVUTS 
    RSTUVWXYZAZYXWVUTSR 
    QRSTUVWXYZAZYXWVUTSRQ 
PQRSTUVWXYZAZYXWVUTSRQP 
OPQRSTUVWXYZAZYXWVUTSRQPO 

如果删除在if/else声明其将金字塔中双方并简单地只c = (c - 'A' + 1) % 26 + 'A';,我得到下面的输出:

  A 
      BCD 
      EFGHI 
     JKLMNOP 
     QRSTUVWXY 
     ZABCDEFGHIJ 
     KLMNOPQRSTUVW 
    XYZABCDEFGHIJKL 
    MNOPQRSTUVWXYZABC 
    DEFGHIJKLMNOPQRSTUV 
    WXYZABCDEFGHIJKLMNOPQ 
RSTUVWXYZABCDEFGHIJKLMN 
OPQRSTUVWXYZABCDEFGHIJKLM 

任何想法?

回答

6

问题是您忘记增加实际的整体字符。对于每一行,您需要添加字符,直到您获得您应该从下一行开始的值。谢天谢地,这很容易做到:

... 
    max += 2; 
    c = (c - 'A' + max/2 + 1) % 26 + 'A'; // Add this line 
} 
+0

@ johnchen902你确定吗?我直接复制粘贴代码以确保它可以正常工作。你是在'max + = 2'之前还是之后? – Xymostech 2013-05-04 04:14:33

+0

对不起,我的坏。我把它放在'max + = 2'之前# – johnchen902 2013-05-04 04:17:12

+0

完美,谢谢。 – Martin 2013-05-04 04:22:28