输出三角形的各种方法,难度递增,思路越接近计算机结构化编程,有助于锻炼算法思维!
1.穷举。
- // n 是三角形边长
- void print_triangle ( int n )
- {
- // 依序穷举每一个位置,逐一判断要印什么。
- for ( int i = 0 ; i < n ; i ++)
- {
- for ( int j = 0 ; j < n ; j ++)
- {
- if ( i + j < n - 1 )
- cout << ' ' ;
- else
- cout << '@' ;
- }
- cout << '\n' ;
- }
- }
- void print_triangle ( int n )
- {
- // 直角三角形分成多行
- for ( int i = 0 ; i < n ; i ++)
- {
- // 一行分成两阶段:空白、三角形
- for ( int j = 0 ; j < n - i - 1 ; j ++) cout << ' ' ;
- for ( int j = n - i - 1 ; j < n ; j ++) cout << '@' ;
- cout << '\n' ;
- }
- }
3. 提取重复代码块为函数
- // 一行:i 是行数、n 是三角形边长
- void print_line ( int i , int n )
- {
- // 一行分成两阶段:空白、三角形
- for ( int j = 0 ; j < n - i - 1 ; j ++) cout << ' ' ;
- for ( int j = n - i - 1 ; j < n ; j ++) cout << '@' ;
- cout << '\n' ;
- }
- void print_triangle ( int n )
- {
- for ( int i = 0 ; i < n ; i ++)
- print_line ( i , n );
- }
5. 比较差异,提取参数
- // 一串:n 是长度、c 是字元
- void print_sequence ( int n , char c )
- {
- for ( int i = 0 ; i < n ; ++ i ) cout << c ;
- }
- // 一行:i 是行数、n 是三角形边长
- void print_line ( int i , int n )
- {
- print_sequence ( n - i - 1 , ' ' );
- print_sequence ( i , '@' );
- cout << '\n' ;
- }
- void print_triangle ( int n )
- {
- for ( int i = 0 ; i < n ; i ++)
- print_line ( i , n );
- }
6. 调整参数,便于阅读
- void print_sequence ( int n , char c )
- {
- for ( int i = 0 ; i < n ; ++ i ) cout << c ;
- }
- // 一行:s 是空白长度、t 是符号长度(两者都是填充长度)
- void print_line ( int s , int t )
- {
- print_sequence ( s , ' ' );
- print_sequence ( t , '@' );
- cout << '\n' ;
- }
- void print_triangle ( int n )
- {
- for ( int i = 0 ; i < n ; i ++)
- print_line ( i , n - i - 1 );
- }
经过这6步的改进,现在的算法重用性很高,经过简单的修改后就可以应对各种打印图形的题目了!