2013-05-04 2 views
2

Я пытаюсь написать программу в C, что дает 13 строк пирамиды со следующим выходом (обратите внимание на рисунок букв, т.е. BCB):печать алфавит пирамида в C

  A 
      BCB 
      DEFED 
     GHIJIHG 
     KLMNONMLK 
     PQRSTUTSRQP 
     VWXYZABAZYXWV 
    CDEFGHIJIHGFEDC 
    KLMNOPQRSRQPONMLK 
    TUVWXYZABCBAZYXWVUT 
    DEFGHIJKLMNMLKJIHGFED 
OPQRSTUVWXYZYXWVUTSRQPO 
ABCDEFGHIJKLMLKJIHGFEDCBA 

Вот моя попытка в растворе:

#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

+0

Извините, мой плохой. Я положил его до 'max + = 2' – johnchen902

+0

Отлично, спасибо. – Martin

Смежные вопросы