《N诺机试指南》(七)排版类问题
1.菱形问题:
解析: 主要通过打印空格和星形来打印整个图形,将整体分为=上三角形+下三角形
首先观察上三角形可以发现:第一行2个空格1个星、第二行1个空格3个星、第三行0个空格5个星
空格数:2-->1-->0 、星数:1-->3-->5
代码:
#include <bits/stdc++.h> using namespace std; int main(){ 1.打印菱形 int n; scanf("%d", &n);//输入打印菱形对角边 //打印上三角形 for(int i=1; i<=n; i++){ //打印空格:个数变化2-->1-->0 for(int j=1; j<=n-i; j++){ printf(" "); } //打印*:个数变化1-->3-->5 (2i-1) for(int j=n-i+1; j<n+i; j++){ printf("*"); } printf("\n"); } //打印下三角形=上三角反过来输出 for(int i=n-1; i>=1; i--){ for(int j=1; j<=n-i; j++){ printf(" "); } for(int j=n-i+1; j<n+i; j++){ printf("*"); } printf("\n"); } return 0 }
在打印上三角时候:
只要满足2i-1即可
2.杨辉三角:
解析:杨辉三角主要是某一行某一列的那个数 = 上一行那一列前面一个的数 + 上一行那一列的数
代码:
2.打印杨辉三角 int a[21][21] = {0}; int n; while( scanf("%d", &n)!=EOF ){ if( n==0 ) return -1; a[1][1] = 1; for(int i=2; i<=n; i++){//从第二行开始 for(int j=1; j<=i; j++){ //这是重点! a[i][j] = a[i-1][j] + a[i-1][j-1]; } } for(int i=1; i<=n; i++){ for(int j=1; j<=i; j++){ printf("%d ", a[i][j]); } printf("\n"); } }
练习: