C++编程练习

C++编程练习

一些C++编程练习

  1. 实心菱形
    题目描述:打印 n 阶实心菱形
    输入描述:输入一个整数n,0 < n <= 10
    输出描述:输出 n 阶实心菱形 , 占 2*n-1 行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #include <iostream>
    using namespace std;

    int main() {
    int n = 0;
    cin >> n;
    if (n > 0 && n <= 10) {
    for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= 2 * n - 1; j++) {
    if (j > n - i && j < n + i)
    cout << "*";
    else
    cout << " ";
    }
    cout << endl;
    }

    for (int i = n - 1; i >= 1; i--) {
    for (int j = 1; j <= 2 * n - 1; j++) {
    if (j > n - i && j < n + i)
    cout << "*";
    else
    cout << " ";
    }
    cout << endl;
    }
    }

    return 0;
    }
  2. 螺旋数字正方形
    题目描述:打印螺旋数字正方形
    输入描述:输入一个整数n,1<=n<=31
    输出描述:输出数字正方形。每个数字占4个字符,右对齐,不全则补足空格。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include <iomanip>

    void SpiralSquare(int **matrix, int x, int y, int start, int n) {
    if (n <= 0)
    return;
    if (n == 1) {
    matrix[x][y] = start;
    return;
    }

    for (int j = y; j < n + y - 1; ++j) // 上
    matrix[x][j] = start++;
    for (int i = x; i < n + x - 1; ++i) // 右
    matrix[i][n + y - 1] = start++;
    for (int j = n + y - 1; j > y; --j) // 下
    matrix[n + x - 1][j] = start++;
    for (int i = n + x - 1; i > x; --i) // 左
    matrix[i][y] = start++;

    SpiralSquare(matrix, x + 1, y + 1, start, n - 2);
    }

    int main() {
    int n;
    cin >> n;
    if (n >= 1 && n <= 31) {
    int **matrix = new int*[n];
    for (int i = 0; i < n; i++)
    matrix[i] = new int[n];

    SpiralSquare(matrix, 0, 0, 1, n);

    for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++)
    cout << setw(4) << matrix[i][j];
    cout << endl;
    }
    }
    return 0;
    }
  3. 汉诺塔
    有三根针A、B、C。A针上有N个盘子,大的在下,小的在上,要求把这N个盘子从A针移到C针,在移动过程中可以借助B针,每次只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。
    Hanio

    将n个盘子从A针移到C针可以分解为三个步骤:

    • 将A上n-1个盘子移到B针上(借助C针);
    • 把A针上剩下的一个盘子移到C针上;
    • 将n-1个盘子从B针移到C针上(借助A针)。

    因此该过程可用递归实现:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    void move(char src, char dest) {
    cout << src << " --> " << dest << endl;
    }

    void hanoi(int n, char src, char medium, char dest) {
    if (n == 1)
    move(src, dest);
    else {
    hanoi(n - 1, src, dest, medium);
    move(src, dest);
    hanoi(n - 1, medium, src, dest);
    }
    }

    int main() {
    int m;
    cout << "Enter the number of diskes: ";
    cin >> m;
    cout << "The steps to moving " << m << " diskes:" << endl;
    hanoi(m, 'A', 'B', 'C');
    return 0;
    }

参考资料

  1. C++语言程序设计基础-学堂在线

更新历史:
2019.08.03 开始整理

# CPP, CS

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×