回 帖 发 新 帖 刷新版面

主题:打印字母金字塔这一题~~

字母金字塔图案。如图:(*号表示空格)

****A****
***ABA***
**ABCBA**
*ABCDCBA*
ABCDEDCBA

题目要求:可以输入某个字母,如上图就是输入E产生的。

我一开始拿到题目时,是这样想的,键入E,E从A算起是第五个字母,所以有5行.就像图中所示,*号部分用空格代替。所有的部分依靠键入

的那个字母来完成的,比如我键入Z,就产生26行。本来我想自己解决这个书里交给我问题,无奈的是,我分析能力不够。。。。求算法,不要

求写代码,就讲解下这题就OK了,小弟感激不尽!!!想了几天,脚都肿了~~。另外,我在论坛里找过答案,有人问过同样的问题,但是回答

的人写的代码,我看不懂,更何况,我的本意是想知道这题怎么解,不是找人帮写代码,自己写代码水平才能上去吧,我不请人帮写作业,我

只是解不开这题,才请教解法的,更多的时候我愿意自己解决,可惜,这题实在搞不定。看看解法与我的一开始的分析有什么不同,帮个忙,

谢谢啊。我只写出这样的效果:

****A
***A
**A
*A
A

我就卡住了。。。杯具!!求助高手,麻烦讲解一下~~。

回复列表 (共3个回复)

沙发

这是模仿bruceteen 以前给出的代码
[code=c]
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main (void)
{
  const char *filled = "**************************";
  const char *alpha1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  const char *alpha2 = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
  int left, ch, walk, n;
  
  ch = getchar();
  if ((n = ch - 'A') < 0  ||  n > 25) {
     fprintf (stderr, "e\n输入错误 : %c 不是大写字母.", (char)ch);  
     abort ();
  } 
  

  left = 0;
  while (left++ <= n)
    printf ("\n%.*s%.*s%s%.*s", n-left,filled, 
      left,alpha1,  alpha2+25-left, n-left,filled);  
  putchar ('\n'); 
  
  
  return 0;
}[/code]

板凳

[quote]这是模仿bruceteen 以前给出的代码
[code=c]
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main (void)
{
  const char *filled = "**************************";
  const char *alpha1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  const char *alpha2 = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
  int left, ch, walk, n;
  
  ch = getchar();
  if ((n = ch - 'A') < 0  ||  n > 25) {
     fprintf (stderr, "e\n输入错误 : %c 不是大写字母.", (char)ch);  
     abort ();
  } 
  

  left = 0;
  while (left++ <= n)
    printf ("\n%.*s%.*s%s%.*s", n-left,filled, 
      left,alpha1,  alpha2+25-left, n-left,filled);  
  putchar ('\n'); 
  
  
  return 0;
}[/code][/quote]

3 楼

对不起,楼主,我没看完您问题的全部陈述就草率的给出了代码,好想还有错误。
思路可以是按行输出:1  首先输出每行开头的*号。2  字母分成两部分    2.1  从字母A到最后一个字母的前一个字符    2.2  从最后一个字母到字母A3  输出字母后面的*号。printf函数printf("%*.*s",2,1,s)这是把字符串s按指定输出:1.  第一个*号表示输出字符串至少占2(后面指定的数)个字符的位置,如果不够,用空格或添充.2.  第二个*号表示只从s输出字符的个数。

我来回复

您尚未登录,请登录后再回复。点此登录或注册