首页 > 代码库 > 1027. 打印沙漏(20)
1027. 打印沙漏(20)
1027. 打印沙漏(20)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
***** *** * *** *****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
***** *** * *** ***** 2
#include <iostream> #include <iomanip> #include <math.h> #include <stdio.h> #include <string> using namespace std; int main() { int num[150]; num[0] = 0; num[1] = 1; for (int i = 2; i < 100; i++) { num[i] = num[i - 1] + (i * 2 - 1) * 2; } char ch; int n, temp; cin >> n >> ch; for (int i = 0; i < 98; i++) { if (n >= num[i] && n < num[i + 1]) { temp = i; } } for (int i = 0; i < temp; i++) { for (int j = 0; j < i; j++){ cout << " "; } for (int j = 0; j < (2 * temp - 1 - 2 * i); j++){ cout << ch; } cout << endl; } for (int i = temp - 1; i >0; i--) { for (int j = 0; j < i - 1; j++){ cout << " "; } for (int j = 0; j < (1 + (temp - i) * 2); j++){ cout << ch; } cout << endl; } cout << n - num[temp]; system("pause"); return 0; }
1027. 打印沙漏(20)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。