主题:打印字母金字塔这一题~~
凌晨一点
[专家分:0] 发布于 2010-12-23 11:32:00
字母金字塔图案。如图:(*号表示空格)
****A****
***ABA***
**ABCBA**
*ABCDCBA*
ABCDEDCBA
题目要求:可以输入某个字母,如上图就是输入E产生的。
我一开始拿到题目时,是这样想的,键入E,E从A算起是第五个字母,所以有5行.就像图中所示,*号部分用空格代替。所有的部分依靠键入
的那个字母来完成的,比如我键入Z,就产生26行。本来我想自己解决这个书里交给我问题,无奈的是,我分析能力不够。。。。求算法,不要
求写代码,就讲解下这题就OK了,小弟感激不尽!!!想了几天,脚都肿了~~。另外,我在论坛里找过答案,有人问过同样的问题,但是回答
的人写的代码,我看不懂,更何况,我的本意是想知道这题怎么解,不是找人帮写代码,自己写代码水平才能上去吧,我不请人帮写作业,我
只是解不开这题,才请教解法的,更多的时候我愿意自己解决,可惜,这题实在搞不定。看看解法与我的一开始的分析有什么不同,帮个忙,
谢谢啊。我只写出这样的效果:
****A
***A
**A
*A
A
我就卡住了。。。杯具!!求助高手,麻烦讲解一下~~。
回复列表 (共3个回复)
沙发
windy0will [专家分:2300] 发布于 2010-12-25 18:43:00
这是模仿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]
板凳
编程小将 [专家分:0] 发布于 2010-12-26 00:15:00
[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 楼
windy0will [专家分:2300] 发布于 2010-12-26 08:34:00
对不起,楼主,我没看完您问题的全部陈述就草率的给出了代码,好想还有错误。
思路可以是按行输出:1 首先输出每行开头的*号。2 字母分成两部分 2.1 从字母A到最后一个字母的前一个字符 2.2 从最后一个字母到字母A3 输出字母后面的*号。printf函数printf("%*.*s",2,1,s)这是把字符串s按指定输出:1. 第一个*号表示输出字符串至少占2(后面指定的数)个字符的位置,如果不够,用空格或添充.2. 第二个*号表示只从s输出字符的个数。
我来回复