7-7 打印沙漏 (20 分)
虽然这道题在比赛的时候,惊险的AC了,但是我之前做过的,比赛遇到了还是有点慌,就记录一下。希望以后心态好一点。
可以先假设中间会输出两个一点,然后推导公式 sum = i * i, 但是最后要减去1,而 i--, 这样i就是对应的层数了(对了,要记得乘2,因为sum算的是一个完整的,而我们假设的是两个对称的)
AC代码:
#includeusing namespace std; int main() { int n, i, sum; char c; cin >> n >> c; for(i = 1; ; i++) { if(2*i*i-1 > n) { sum = 2*(i-1)*(i-1) - 1; break; } } int sx = n - sum; i--; for(int j = i; j >= 1; j--) { for(int k = i - j; k > 0; k--) cout << ' '; for(int k = 2*j-1; k > 0; k--) cout << c; cout << endl; } for(int j = 2; j <= i; j++) { for(int k = i - j; k > 0; k--) cout << ' '; for(int k = 2*j-1; k > 0; k--) cout << c; cout << endl; } cout << sx << endl; return 0; }