下三角形的一些思考
2014-03-07 22:21
183 查看
一、下等腰三角形
问题描述:用双重循环实现以下图形的输出AA ABBA ABCCBA ABCDDCBA ABCDEEDCBA ABCDDCBA ABCCBA ABBA AA
1、思考过程
通过分析,将输出分为两大块。一为上三角,即从第1行到第i行,另外为下三角,即从第i+1行到2*i-1行。开始时,自己又另外将上三角分为三个模块:空格模块、A->最大字母以及最大字母->A。那么这样分析后,就很好办了。输入:上三角行数a
输出
第1行到第i行:用j控制行数(from 1 to i),则先输出a - i个空格,然后输出A->A+i,最后输出A+i->A。
第i+1行到2i-1行:可以用j控制行数(from 1 to i-1)(又从1计数,这和输出无关)。则先输出i - j个空格,然后输出A->A+i,最后输出A+i->A。
反正这些变量太麻烦了,简直让人讨厌。有没有其他方法呢?头脑里闪过数学中对称思想,利用这种思想,就简单了很多了。
输出中第i+1行到2i-1行类似第1行到第i行的倒置,不过行数反过来而已。而输出A+i->A则可以看作是输出A->A+i对称,直接将循环控制语句稍作修改即可。
2、总结
其实开始时没有很好地利用对称信息,最终浪费了较多时间。如果能发现规律,则能较快地解决问题。今天纠结的另外一个问题是输出A+i->A。初始代码如下:
for ( k = i; k >= 1; k-- ) { printf("%c", 'A'+k-1); } printf("\n");
这就相当于控制变量从i开始,那么规律则是+k。稍加总结,就可得出'A'+k-1规律。
通过这道题目,加深了循环命令的掌握。
3、附最后程序代码,如下:
/* * 作 者: 林龙 * 专业班级:计算机学院 * 完成日期:2014 年 3 月7 日 * 版 本 号:v1.0 * 输入描述:上三角行数 * 问题描述:下等腰三角形(不同字母组成) * 程序输出: AA ABBA ABCCBA ABCDDCBA ABCDEEDCBA ABCDDCBA ABCCBA ABBA AA * 算法设计:用双重循环进行控制,外循环控制行,内循环控制列(每行输出的字符个数) */ #include <stdio.h> void PriAlpha( int a ); int main() { PriAlpha( 5 ); return 0; } void PriAlpha( int a ) { int i, j, k; for ( i = 1; i <= a ; i ++ ) { // 输出空格 for ( j = 1; j <= a - i ; j ++ ) { printf(" "); } // 输出A-最大字母 for ( k = 1; k <= i; k ++ ) { printf("%c", 'A'+k-1); } // 输出最大字母-A for ( k = 1; k <= i; k ++ ) { printf("%c", 'A'+i-k); } printf("\n"); } // 下三角输出,只是上三角控制语句修改而已 for ( i = a - 1; i >= 1 ; i -- ) { for ( j = 1; j <= a - i ; j ++ ) { printf(" "); } for ( k = 1; k <= i; k ++ ) { printf("%c", 'A'+k-1); } for ( k = 1; k <= i; k ++ ) { printf("%c", 'A'+i-k); } printf("\n"); } }
参考
双重循环的应用实例--等腰三角形相关
相关文章推荐
- 下三角形的一些思考
- 扩展欧几里得的一些思考
- [置顶] 对自动流程图构造技术的一些思考
- 高并发&高可用系统应对策略的一些思考
- 关于软件开发团队的一些思考
- 一些经验总结与常识--沉于思考,默默学习!
- 由NHibernate调用存储过程产生的一些思考
- 关于产品的一些思考——小米之玩机手册
- 对棋牌游戏平台的一些思考
- 公司重构项目带来的一些思考
- 计算机技术发展的一些随笔总结(我们需要思考)
- 关于BM算法的一些思考
- setup time的一些思考点
- 关于产品的一些思考——新浪之爱问资料和爱问知识人
- 关于函数返回值的设计的一些思考
- [体感游戏]关于体感游戏的一些思考(四) --- 克隆战争!
- 静态块的一些思考
- 今天22岁,对于30岁以前的一些事情,我思考了很久,后来却发现网上已经有前辈总结出来了,呵呵,贴出来大家一起看看
- [转]MVC和MVP的一些思考
- 思考问题的一些方法:一般化,特殊化和归纳类比