PTA_打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
2
#include<iostream>
using namespace std;
int main() {
int N;
cin >> N;
char x;
cin >> x;
int index = 0;//存放n的值 2*n*n-1个符号,2*n-1行,上面n-1行,下面n行
int last = 0;
for (int i = 0; i < N; i++)
{
if (i * i * 2 - 1 == N)
{
index = i;
break;
}
else if (i * i * 2 - 1 < N)
{
continue;
}
else if (i * i * 2 - 1 > N)
{
index = i - 1;
last = N - 2 * index * index + 1;
break;
}
}
int index2 = index;
int index3 = 0;
int index4 = index;
int index5 = 1;
if (index == 0)
{
if (N != 0)
{
cout << x << endl;
cout << N - 1;
}
else
{
cout << last;
}
}
else
{
if (index > 1)
{
for (int i = 0; i < index; i++)
{
for (int j = 0; j < 2 * index2 - 1; j++)
{
cout << x;
}
index2--;
if (index2 < 2)
{
break;
}
index3++;
cout << endl;
for (int k = 0; k < index3; k++)
{
cout << " ";
}
}
cout << endl;
for (int i = 0; i < index; i++)
{
for (int j = 0; j < index4 - 1; j++)
{
cout << " ";
}
index4--;
for (int k = 0; k < index5 * 2 - 1; k++)
{
cout << x;
}
index5++;
cout << endl;
}
cout << last;
}
else if (index == 1)
{
cout << x << endl << last;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)