先计算余数,把1先计入图形总数中,每次每行都增加2,由于是上下两行,加入总数时再乘以2,如果,总数大于n的时候,记下最多一行符号的个数及余数,跳出。
输出图案按照上下两部分输出即可。
#include <iostream> using namespace std; int main() { int n; char a; cin >> n >> a; int count = 1, k = 1; int max; int y; while(1) { k += 2; if(count + 2 * k > n) { max = k - 2; y = n - count; break; } count += 2 * k; } for(int i = max; i > 1; i = i - 2) { for(int j = 0; j < max; j++) { if(j < (max - i) / 2) { cout << " "; } else if(j >= (max + i) / 2) { break; } else { cout << a; } } cout << endl; } for(int i = 1; i <= max; i = i + 2) { for(int j = 0; j < max; j++) { if(j < (max - i) / 2) { cout << " "; } else if(j >= (max + i) / 2) { break; } else { cout << a; } } cout << endl; } cout << y; return 0; }