题目要求: 1、键盘输入一个包含n个整数的序列,输出符合要求的数字塔2、其中至少要包含一个有效的递归函数 3、不允许打表输出,否则本次考试成绩为0 输入要求: 1、序列中的整数值在[1..9]之间 2、n值在[1..15]之间 3、输入的值不在1-9之间或n超过15则结束,不考虑其它输入错误 输出要求: 1、输出共12行 a)第1、3行是“=”,每行n*2个 b) 第2行是n个整数的序列,每个数宽度2位,右对齐 c)第4~12行,共n列,输出序列的值x,每列重复的行数是x行,下对齐例: x=7, 则该列输出7个7,下对齐,最上面两行为空格 d)第4行开始的各列数字,宽度为2,右对齐: 2、有效输出的最后一行的最后也加换行符,除此之外不要有多余的空行 用C++代码实现
时间: 2023-05-24 07:07:25 浏览: 82
```c
#include <stdio.h>
void print_row(int pos, int num) {
for (int i = 0; i < num; i++) {
printf("%*d ", pos + 1, num);
}
putchar('\n');
}
void print_tower(int *arr, int n) {
int pos = n - 1;
// 第一行
for (int i = 0; i < n; i++) {
printf("%*c", pos + 2, '=');
}
putchar('\n');
// 第二行
for (int i = 0; i < n; i++) {
printf("%2d ", arr[i]);
}
putchar('\n');
// 第三行
for (int i = 0; i < n; i++) {
printf("%*c", pos + 2, '=');
}
putchar('\n');
// 第四行及以下
for (int i = 0; i < n; i++) {
print_row(pos, arr[i]);
pos--;
}
}
int find_max(int *arr, int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
int main() {
int arr[15];
int n, num;
// 读入序列
for (n = 0; n < 15; n++) {
scanf("%d", &num);
if (num < 1 || num > 9) {
break;
}
arr[n] = num;
}
if (n == 0) {
printf("序列为空\n");
return 0;
}
n--; // 因为n从0开始计数
// 输出数字塔
int max = find_max(arr, n + 1);
print_tower(arr, n + 1);
return 0;
}
```
阅读全文