什么是嵌套循环

循环语句之中还有循环语句,做嵌套循环。 左下三角形图案
左上三角形图案
右上三角形图案
右下三角形图案
金字塔
数字正三角


1. 左下三角形图案

题目:

分析:

题解:


2. 左上三角形图案

题目:

题解:

/*
 * v1.0.1
 * 思路:
 * n 行数
 * m *个数
 * 记录第一行*个,后面个数减1
 * 循环1到n
*/
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for (int i=0,m=n;i<n;i++,m--)   //0~n-1 n行
    {  
        for (int j=0;j<m;j++)
        {
            cout<<"*";
        }
        cout<<endl;
    }
    return 0;
}

3. 右上三角形图案

题目:
输入n,打印如下三角形图案。如下,n=5。

题解:

/*
右上角直角三角形
5
*****
 ****
  ***
   **
    *
分析:列表分析法
行号  空格数  *数
------------------
1      0      5
2      1      4
3      2      3
4      3      2
5      4      1
...
i      ?      ?
       空格数 + *数 = n
       只要算出空格数或*数之一,另一个即可导出
       现在算空格数
       试探法:空格数=i-1
       等差数列法:Ai=A1+(i-1)*d
                     =0+(i-1)*1
                     =i-1  
i      i-1    n-(i-1)=n-i+1 
*/
#include <iostream>
using namespace std;
int main() {
    int n;
    cin>>n; 
    for (int i=1;i<=n;i++) {     //行数 
        for (int j=0;j<i-1;j++)  //空格数 
            cout<<" ";
        for (int j=0;j<n-i+1;j++)//*数 
            cout<<"*";
        cout<<endl; 
    }
    return 0;
}

4. 右下三角形图案

题目:
输入n,输出右下三角形图案。如下:n=5。

题解:

/*
右下角直角三角行
5
    *
   **
  ***
 ****
*****
分析:列表分析法
行号 空格数 *数
----------------
1     4      1
2     3      2
3     2      3
4     1      4
5     0      5
i     ?      ?
     空格数 + *数 = n
     所以,算容易计算的,显然*数容易算
     开始算...
i     ?      i
i     n-i    i
*/
#include <iostream>
using namespace std;
int main() {
    int n;
    cin>>n;
    for (int i=1;i<=n;i++) {     //行数 
        for (int j=0;j<n-i;j++)  //空格数 
            cout<<" ";
        for (int j=0;j<i;j++)    //*数 
            cout<<"*";
        cout<<endl;              //换行 
    }
    return 0;
}

12. 金字塔

题目:

题解:

/*
5
    /\
   /__\
  /____\
 /______\
/________\
分析:/、\各有1个,不列出 
行号  空格数   _个数
--------------------
1      4        0
2      3        2
3      2        4
4      1        6
5      0        8
...
i     等差     等差 
      数列     数列
      d=-1     d=2 
-------------------- 套公式:a1+(i-1)*d
   4+(i-1)*(-1) 0+(i-1)*(2) 
   = 5-i        =2i-2
   = n-i
   此例n=5 
*/
#include <iostream>
using namespace std;
int main() {
    int n;
    cin>>n;                        //行数 
    for (int i=1;i<=n;i++) {       //行号
                                   //每行由以下四个任务 
        for (int j=1;j<=n-i;j++) { //任务1 每行空格数,来自上述推导 
            printf(" ");
        }
        printf("/");               //任务2 左边是/ 
        for (int k=1;k<=2*i-2;k++) {//下滑线数量,来自上述推导 
            printf("_");
        }
        printf("\\");              //任务3 右边\,必须转义字符 
        printf("\n");              //任务4 换行 
    }
    return 0;
}

数字正三角

题目:

题解:

/*
字符图形-数字正三角(3)
4444444
 33333
  222
   1
分析:行数就是n
行数   空格数    数字数
1       0        7
2       1        5
3       2        3
4       3        1         
规律查找:可以用试探法,或者等差数列法
试探法  i-1      ?不好看出来,就用等差数列法,套公式算 
等差数列法       1+(t-1)*2 
                 =2t-1 (倒序看)
                 这里t是倒数的次序
                 倒数   正数 
                  1      n
                  2      n-1
                  3      n-2
                  ...
                  t      n-i+1
                  所以,把t用 n-i+1 替换 
                  2t-1 = 2(n-i+1)-1 = 2(n-i)+1
*/
#include <iostream>
using namespace std;
int main() {
    int n;
    cin>>n;
    int num=n+1; 
    for (int i=1;i<=n;i++) {
        for (int j=1;j<=i-1;j++)
            cout<<" ";
        num--;
        for (int k=1;k<=2*(n-i)+1;k++)
            cout<<num;
        cout<<endl;
    } 
    return 0;
}

小结:图形输出题型解题方法

  1. 列出行号、空格数、字符数\
  2. 分析空格数、字符数和行号的规律,有两种分析方法:
    • 方法一:试探法\
    • 方法二:等差数列法