PAT B1027打印沙漏

本文介绍了一种使用等差数列求和原理,通过输入指定数量的符号和一个字符,打印出最大可能的沙漏形状,并计算剩余符号数量的算法。重点讲解了如何确定沙漏底边符号数量,确保打印的沙漏形状符合题目要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

传送门

正文

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

*****
 ***
  *
 ***
*****

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:
19 *

输出样例:
*****
 ***
  *
 ***
*****
2

思路

只要知道底边的的数量m,就可以打印出该图形,注意题目
要求要求打印出的沙漏能用掉尽可能多的符号,又因为每行
奇数个符号,故可以使用等差数列求和求和得出打印出沙漏所需
的符号总数x(x<=n),即((1+m)
(1+m)/2)-1<=n;可以求得
m的最大值 ,值得注意的一点是,题目要求m必须为奇数,
因此如果算出m为偶数,需要将m=m-1; 然后计算x= ((1+m)*(1+m)/2)-1
再由n-x即可得到剩余的符号数量。

参考题解

#include<iostream>
#include<cmath>
using namespace std;
/*
只要知道底边的*的数量m,就可以打印出该图形,注意题目
要求要求打印出的沙漏能用掉尽可能多的符号,又因为每行
奇数个符号,故可以使用等差数列求和求和得出打印出沙漏所需
的符号总数x(x<=n),即((1+m)*(1+m)/2)-1<=n;可以求得
m的最大值 ,值得注意的一点是,题目要求m必须为奇数,
因此如果算出m为偶数,需要将m=m-1; 然后计算x= ((1+m)*(1+m)/2)-1
再由n-x即可得到剩余的符号数量。 
*/
int main(){
	int n,m,x,remain;
	char ch;
	cin>>n>>ch;
	m=sqrt((n+1)*2.0)-1;
	if(m%2==0)m--;
	x=((1+m)*(1+m)/2)-1;
	remain=n-x;
	for(int i=0;i<(m+1)/2;i++){
		for(int j=0;j<i;j++)cout<<" ";
		for(int k=0;k<m-2*i;k++)cout<<ch;
		cout<<endl;
	}
	for(int i=(m+1)/2-2;i>=0;i--){
		for(int j=0;j<i;j++)cout<<" ";
		for(int k=0;k<m-2*i;k++)cout<<ch;
		cout<<endl;
	}
	cout<<remain<<endl;
	return 0;
} 
{"log":{"version":"1.2","creator":{"name":"Reqable","version":"2.30.3"},"entries":[{"startedDateTime":"2025-05-20T07:18:39.857Z","time":43,"request":{"method":"GET","url":"https://www.gy0.cc/consumer/sc/api/getScanInfo?key=2524544%2520-T3J2ZHIO8EAE2EJJ%253AL85&pagePath=%2523%252Fsc%252FpureRawDoll%253Fkey%253D2524544%252B-T3J2ZHIO8EAE2EJJ%253AL85%2526SHUYUN_TOKEN%253D026372DD7587FCE040CD6067F9A40B1C527B233645D296A7B84D66206FCB3F5D7D66F51061A0AB6541257AA958C4D9E996BA8AFC0226ED1F8F19B5E7B1F9430AC6895F620BD86071B7C223107D25A02FCB3E1831258F80550B1027CCF727A67D%2526longitude%253D104.06688503689236%2526latitude%253D30.57524875217014","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":authority","value":"www.gy0.cc"},{"name":":method","value":"GET"},{"name":":path","value":"/consumer/sc/api/getScanInfo?key=2524544%2520-T3J2ZHIO8EAE2EJJ%253AL85&pagePath=%2523%252Fsc%252FpureRawDoll%253Fkey%253D2524544%252B-T3J2ZHIO8EAE2EJJ%253AL85%2526SHUYUN_TOKEN%253D026372DD7587FCE040CD6067F9A40B1C527B233645D296A7B84D66206FCB3F5D7D66F51061A0AB6541257AA958C4D9E996BA8AFC0226ED1F8F19B5E7B1F9430AC6895F620BD86071B7C223107D25A02FCB3E1831258F80550B1027CCF727A67D%2526longitude%253D104.06688503689236%2526latitude%253D30.57524875217014"},{"name":":scheme","value":"https"},{"name":"shuyun_token","value":"026372DD7587FCE040CD6067F9A40B1C527B233645D296A7B84D66206FCB3F5D7D66F51061A0AB6541257AA958C4D9E996BA8AFC0226ED1F8F19B5E7B1F9430AC6895F620BD86071B7C223107D25A02FCB3E1831258F80550B1027CCF727A67D"},{"name":"sec-ch-ua-platform","value":"\"Android\""},{"name":"user-agent","value":"Mozilla/5.0 (Linux; Android 10; Redmi K20 Pro Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/134.0.6998.136 Mobile Safari/537.36 XWEB/1340095 MMWEBSDK/20250201 MMWEBID/2949 MicroMessenger/8.0.58.2841(0x28003A3E) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64"},{"name":"accept","value":"application/json, text/plain, */*"},{"name":"sec-ch-ua","value":"\"Chromium\";v=\"134\", \"Not:A-Brand\";v=\"24\", \"Android WebView\";v=\"134\""},{"name":"sec-ch-ua-mobile","value":"?1"},{"name":"x-requested-with","value":"com.tencent.mm"},{"name":"sec-fetch-site","value":"same-origin"},{"name":"sec-fetch-mode","value":"cors"},{"name":"sec-fetch-dest","value":"empty"},{"name":"referer","value":"https://www.gy0.cc/consumer/sc/"},{"name":"accept-encoding","value":"gzip, deflate, br, zstd"},{"name":"accept-language","value":"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"},{"name":"priority","value":"u=1, i"}],"queryString":[{"name":"key","value":"2524544%20-T3J2ZHIO8EAE2EJJ%3AL85"},{"name":"pagePath","value":"%23%2Fsc%2FpureRawDoll%3Fkey%3D2524544%2B-T3J2ZHIO8EAE2EJJ%3AL85%26SHUYUN_TOKEN%3D026372DD7587FCE040CD6067F9A40B1C527B233645D296A7B84D66206FCB3F5D7D66F51061A0AB6541257AA958C4D9E996BA8AFC0226ED1F8F19B5E7B1F9430AC6895F620BD86071B7C223107D25A02FCB3E1831258F80550B1027CCF727A67D%26longitude%3D104.06688503689236%26latitude%3D30.57524875217014"}],"headersSize":1476,"bodySize":0,"_status":"completed","_startTimestamp":1747725519857796,"_endTimestamp":1747725519860535},"response":{"status":200,"statusText":"","httpVersion":"HTTP/2.0","cookies":[],"headers":[{"name":":status","value":"200"},{"name":"server","value":"openresty"},{"name":"date","value":"Tue, 20 May 2025 07:18:39 GMT"},{"name":"content-type","value":"application/json"},{"name":"access-control-allow-credentials","value":"true"},{"name":"access-control-allow-methods","value":"GET, POST, OPTIONS"},{"name":"access-control-allow-headers","value":"DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type"}],"content":{"size":1538,"mimeType":"application/json","text":"{\"returnCode\":\"1\",\"returnMsg\":\"获取成功\",\"errorCode\":null,\"errorCodeDes\":null,\"datas\":\"{\\\"activityRuleId\\\":10000,\\\"adCode\\\":\\\"510107\\\",\\\"appletScan\\\":true,\\\"areaHeaderUrl\\\":\\\"https://www.gy0.cc/cpmdp/sc\\\",\\\"code\\\":\\\"-T3J2ZHIO8EAE2EJJ:L85\\\",\\\"codeStoreId\\\":66605240,\\\"customerPrizeKey\\\":\\\"2524544+-T3J2ZHIO8EAE2EJJ:L85\\\",\\\"dealer\\\":{\\\"areaFirstCode\\\":\\\"50025920\\\",\\\"areaFirstId\\\":510,\\\"areaFirstName\\\":\\\"乐山销售大区\\\",\\\"areaSecondId\\\":520,\\\"areaSecondName\\\":\\\"犍为业务部\\\",\\\"areaThreeId\\\":522,\\\"areaThreeName\\\":\\\"乐山五通桥\\\",\\\"marketCenterCode\\\":\\\"50002083\\\",\\\"marketingCenter\\\":\\\"sc\\\",\\\"name\\\":\\\"乐山市五通桥区吉鸿商行\\\",\\\"no\\\":\\\"160007278\\\",\\\"waiterMaxAmount\\\":0},\\\"fillUserInfo\\\":0,\\\"member\\\":{\\\"gmtRegist\\\":1747725497730,\\\"hasUser\\\":1,\\\"headImgUrl\\\":\\\"https://thirdwx.qlogo.cn/mmopen/vi_32/kCoOHhj27ko0xKXiabIqvqpNdzMgnGfnlU3fuBftiaaqrLpic5X7ibPW1BpqqhMxA47KIRssmH3Zc0ia9HfgsYLNicjg/132\\\",\\\"id\\\":2524544,\\\"idCardNo\\\":\\\"\\\",\\\"isException\\\":0,\\\"isFocusWeixin\\\":0,\\\"mobile\\\":\\\"17705821447\\\",\\\"nickName\\\":\\\"开心就好\\\",\\\"sex\\\":\\\"0\\\",\\\"status\\\":\\\"O\\\",\\\"type\\\":\\\"XF\\\",\\\"unionId\\\":\\\"oQdqpwKgoDoZnJUvyHkR_JzYU4vg\\\"},\\\"openId\\\":\\\"od4Kx6seH0c9VMOczGCi1AeMNmhs\\\",\\\"redRain\\\":false,\\\"result\\\":[{\\\"activityType\\\":0,\\\"awardName\\\":\\\"10.8元红包\\\",\\\"count\\\":1080,\\\"drinkGame\\\":0,\\\"fillUserInfo\\\":0,\\\"rewardType\\\":4,\\\"showImg\\\":\\\"\\\",\\\"userInfoType\\\":0}],\\\"ruleId\\\":10155,\\\"showAd\\\":false,\\\"staticRoot\\\":\\\"https://www.gy0.cc/cpmdp/static/sc\\\",\\\"userInfoType\\\":0,\\\"virtualProductId\\\":148338,\\\"winBeerSquare\\\":false}\"}"},"redirectURL":"","headersSize":326,"bodySize":1538,"_status":"completed","_startTimestamp":1747725519898801,"_endTimestamp":1747725519900708},"cache":{},"timings":{"send":-1,"wait":-1,"receive":-1},"serverIPAddress":"134.175.212.211","connection":"53","comment":"","_id":159,"_uid":"2618f643-4511-42dd-87e7-986a5d204ff3","_cid":53,"_ctime":1747725516423,"_sid":81,"_stime":1747725519857,"_serverAddress":"134.175.212.211","_serverAddressFamily":0,"_serverPort":443,"_clientAddress":"192.168.51.9","_clientAddressFamily":0,"_clientPort":41844,"_app":{"name":"微信","id":"com.tencent.mm","path":null,"stackTrace":null}}]}} 帮我改成一个正常的请求
最新发布
05-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逝不等琴生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值