Description:打印杨辉三角形。
Input:输入数据含有不多于50个的正整数n(n≤10)。
Output:三角形的每个项占3个字符宽。每个三角形之间空一行,最后的三角形之后没有空行。见样本输出。
#include <iostream> #include <vector> using namespace std; inline void printPascalTriangle(int n) {//创建打印杨辉三角函数,内联函数更加省时间 vector<vector<int>> triangle(n); for (int i = 0; i < n; ++i) { triangle[i].resize(i + 1); triangle[i][0] = triangle[i][i] = 1; for (int j = 1; j < i; ++j) { triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; }//按照杨辉三角规律进行循环 } for (const auto& row : triangle) { for (int num : row) { cout.width(3); cout << num; }//注意题干要求输出格式 cout << endl; } } int main() { int n; while (cin >> n) { printPascalTriangle(n); //调用函数 cout << endl; } return 0; }
输出结果为
修改代码后的结果:
#include <iostream> #include<iomanip> using namespace std; int main() { int n; while(cin >> n) { int arr[10][10] = {0}; for (int i = 0; i < n; i++) { arr[i][0] = 1; arr[i][i] = 1; for (int j = 1; j < i; j++) { arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; } } for (int i = 0; i < n; i++) { for(int j=n-1-i;j>=0;j--) cout << ' '; for (int k = 0; k <= i; k++) { cout << setw(3) << arr[i][k]; } cout << endl; } } return 0; }
输出后结果如下:
输出不了题目中的要求格式,求助大佬应该如何加入空格的循环。
再一次对空格的改进:
#include <iostream> using namespace std; int main() { int n; int data[50][50]; int i = 0; int j = 0; while (cin >> n) { for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { data[i][j] = 1; } } for (i = 1; i < n; i++) { for (j = 1; j < i; j++) { data[i][j] = data[i - 1][j] + data[i - 1][j - 1]; } } for (i = 0; i < n; i++) { for (int k = 0; k < 2 * (n - 1) - (3 * i / 2)-n/2; k++) { cout << " "; } for (j = 0; j <= i; j++) { printf("%3d", data[i][j]); } cout << endl; } } return 0; }
越来越像了,但还是不对