PTA(Basic Level)1027.打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
思路
- 说一下推导过程:
- 设除了中间的
*外两边的高度都为\(n\) - 两边其实都是等差数列:最后我们可以得到总的星星数关于高度\(n\)的表达式:\(f(n) = 2*n*n+4*n+1\)
- 显然上述函数是增函数,那么只要从
i=0开始枚举就能逼近下限 - 剩下的就是对输出格式的控制了,上下两个三角形其实是差不多的代码,互为逆过程
- 最大最大的一个坑❗——字符后面不能有空格,不然有两个测试点会
PE
- 设除了中间的
代码
#include<bits/stdc++.h>
using namespace std;
int get_height(int x)
{
for(int i=0;;i++)
{
int star_cnt = 2*i*i + 4*i + 1;
if(star_cnt > x)
return i-1;
}
}
int main()
{
int all;
char ch;
cin >> all;
getchar();
cin >> ch;
if(all == 0)
{
cout << 0;
return 0;
}
int height = get_height(all);
int longest_star = 2*height + 1;
for(int i=1;i<=height;i++)
{
for(int j=2;j<=i;j++) cout << " ";
for(int k=1;k<=longest_star;k++) cout << ch;
longest_star -= 2; //为2的等差数列
cout << endl;
}
longest_star = 2*height + 1;
for(int i=1;i<=(longest_star-1)/2;i++) cout << " ";
cout << ch << endl;
longest_star = 3;
for(int i=height;i>=1;i--)
{
for(int j=2;j<=i;j++) cout << " ";
for(int k=1;k<=longest_star;k++) cout << ch;
longest_star += 2; //为2的等差数列
cout << endl;
}
cout << all - (2*height*height + 4*height + 1);
return 0;
}
引用
https://pintia.cn/problem-sets/994805260223102976/problems/994805294251491328
PTA(Basic Level)1027.打印沙漏的更多相关文章
- PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20)
PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20) http://www.patest.cn/contests/pat-b-practise/1027 本题 ...
- PAT (Basic Level) Practise (中文)1027. 打印沙漏(20)
1027. 打印沙漏(20) 时间限制 200 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求你写个程序把给定的符号打印成 ...
- PAT乙级 1027. 打印沙漏(20)
1027. 打印沙漏(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求你写个程序把给定的符号打印成 ...
- PAT-乙级-1027. 打印沙漏(20)
1027. 打印沙漏(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求你写个程序把给定的符号打印成 ...
- PAT 乙级 1027 打印沙漏(20) C++版
1027. 打印沙漏(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求你写个程序把给定的符号打印成 ...
- PAT 1027 打印沙漏(20)(思路)
1027 打印沙漏(20)(20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓& ...
- PAT——乙级1036:跟奥巴马一起编程 &乙级1027:打印沙漏 (有坑)
乙级1036 1036 跟奥巴马一起编程 (15 point(s)) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算 ...
- PAT(B) 1027 打印沙漏(Java)
题目链接:1027 打印沙漏 (20 point(s)) 题目描述 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * ...
- PTA(Basic Level)1006.Sign In and Sign Out
At the beginning of every day, the first person who signs in the computer room will unlock the door, ...
随机推荐
- PHP回顾(面向对象)
类中的成员属性不能够用函数为其赋值.public age = rand(1,100);//这是错误的: __get() __set() __isset() __unset() final 用来修 ...
- jquery blur()函数 语法
jquery blur()函数 语法 作用:当元素失去焦点时发生 blur 事件.blur() 函数触发 blur 事件,或者如果设置了 function 参数,该函数也可规定当发生 blur 事件时 ...
- Vue3.0+TypeScript
序言 资料 https://www.cnblogs.com/chanwahfung/p/11968205.html
- Shell登陆
Shell登录信息 注:只对本地终端起作用,远程终端不起作用(也就是说这个文件对远程登录是无效的). 修改后: 输出: 注:这里在配置文件中添加\l之后会显示终端(这里为终端1),按住Alt+F2可以 ...
- Primes and Multiplication
C - Primes and Multiplication 思路:找到x的所有质数因子,用一个vector储存起来,然后对于每一个质因子来说,我们要找到它对最后的答案的贡献的大小,即要找到它在最后的乘 ...
- Speed
传送门:Speed 题目大意 给一棵n个点的无根树,每条树边i给出li和ri表示速度在[li,ri]内才能通过这条边. 现在有m个询问,每个询问给出一个速度x,求以x的速度(不能改变)能在树上通过的路 ...
- css垂直居中布局总结
简介 总结记录一下经常需要用到垂直居中布局,欢迎补充(空手套...O(∩_∩)O) 以下栗子如果未特别标注同一使用这样的html结构 <div class="container&quo ...
- NetScaler VPX configration
境搭建概述 本文主要介绍Netscaler的安装配置,以及与StoreFront相结合,实现外网访问内网资源.当用户访问时,Netscaler Gateway Virtual Server将把请求转给 ...
- LeetCode 88. 合并两个有序数组(Merge Sorted Array)
题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- LeetCode 48. 旋转图像(Rotate Image)
题目描述 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: ...