K形图案题解
K形图案
https://www.nowcoder.com/practice/646521737a254a12825b8b629a2776c8
分析:
本题主要考察编程语句中的循环控制和输入输出流控制。
C++代码实现:
解法1
#include <bits/stdc++.h> using namespace std; int main() { //up, down分别记录上半部分和下半部分的循环次数 //cur记录当前行的输出个数 int up = 0, down = 0, cur = 0; //一直读取控制行输入 while(cin >> up) { //初始化,down部分控制(K+1)行的输出(也可以通过自增up实现) down = up + 1; cur = up + 1; //K的上半部分循环 while(up--) { //逐行显示* for(int i = 0; i < cur; ++i) { cout << '*' << ' '; //如果当前输出最后一个则换行 if(i == cur-1) cout << endl; } //当前行个数自减 cur--; } //K的下半部分循环 while(down--) { //逐行显示* for(int i = 0; i < cur; ++i) { cout << '*' << ' '; //如果当前输出最后一个则换行 if(i == cur-1) cout << endl; } //当前行个数自增 cur++; } } return 0; }
解法2:
#include <bits/stdc++.h> using namespace std; int main() { //up, down分别记录上半部分和下半部分的循环次数 //cur记录当前行的输出个数 int up = 0, down = 0, cur = 0; //一直读取控制行输入 while(cin >> up) { //初始化 down = up + 1; cur = up + 1; int total = up * 2 + 1; for(int i = 0; i < total; ++i) { //判断是否上半部分 if(i < up) { //逐行绘制上半部分 for(int j = 0; j < cur; ++j) { cout << "* "; //控制换行 if(j == cur-1) cout << endl; } cur--; } else { //逐行绘制下半部分 for(int j = 0; j < cur; ++j) { cout << "* "; //控制换行 if(j == cur-1) cout << endl; } cur++; } } } return 0; }
总结:
这类输出题考察了循环语句的使用和输出格式,重点注意一些循环语句中变量的初始化。以防止漏了循环次数或者增加了循环次数。本题的时间复杂度为O(n),其中n为输入K的大小,空间复杂度为O(1)。