2013-05-04 222 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