1027 打印沙漏 (20 分)
 

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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例:

*****
***
*
***
*****
2 初步答案:
 #include <stdio.h>
int main()
{
int N;
char ch;
scanf("%d %c", &N, &ch); int num = ; //记录上三角的行数 for (int i = 1; i <= N; i++)
11 {
12 if (2 * i * i - 1 <= N)
13 num = i;
14 else
15 break;
16 } //打印上三角
for (int i = ; i < num; i++)
{
for (int j = ; j < i; j++)
printf(" ");
for (int j = i; j < (num - i) * 2 - 1 + i; j++)
24 printf("%c", ch);
printf("\n");
} //打印下三角
for (int i = ; i <= num; i++)
{
for (int j = ; j < num - i; j++)
printf(" ");
for (int j = num - i; j < i * 2 - 1 + num - i; j++)
35 printf("%c", ch);
printf("\n");
} printf("%d", N - * num * num + ); return ;
}

看了答案后改进后的答案:

1.我之前计算上三角的行数是用枚举的方式,其实可以直接用2 * row ^2 - 1 <= N; 解出这个不等式row <= sqrt((N + 1)/2)'

2.打印字符其实从0开始到2 * row - 1即可,不必在开始条件和结束条件中都加上前面空格的数量

 #include <stdio.h>
#include <math.h> int main()
{
int N;
char ch;
scanf("%d %c", &N, &ch); int num = ; //记录上三角的行数 num = (int)sqrt((N + 1.0) / 2); //打印上三角
for (int i = ; i < num; i++)
{
for (int j = ; j < i; j++)
printf(" ");
for (int j = 0; j < (num - i) * 2 - 1; j++)
20 printf("%c", ch);
printf("\n");
} //打印下三角
for (int i = ; i <= num; i++)
{
for (int j = ; j < num - i; j++)
printf(" ");
for (int j = 0; j < i * 2 - 1; j++)
31 printf("%c", ch);
printf("\n");
} printf("%d", N - * num * num + ); return ;
}

答案的做法似乎更加巧妙:

以下是答案的解题思路和代码:

代码:

 #include <stdio.h>
#include <math.h> int main()
{
int N;
char c;
scanf("%d %c", &N, &c); int bottom = (int)sqrt((N + 1.0) * ) - ; //底边星型字符的数量
if (bottom % == ) //如果bottom是偶数,bottom减一变成奇数
bottom--; for (int i = bottom; i >= ; i -= )
{
for (int j = ; j < (bottom - i) / ; j++)
printf(" "); for (int j = ; j < i; j++)
printf("%c", c); printf("\n");
} //打印下三角
for (int i = ; i <= bottom; i += )
{
for (int j = ; j < (bottom - i) / ; j++)
printf(" ");
for (int j = ; j < i; j++)
printf("%c", c); printf("\n");
} printf("%d", N - (bottom + ) * (bottom + ) / + ); return ;
}
 

B1027 打印沙漏的更多相关文章

  1. 【算法笔记】B1027 打印沙漏

    1027 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇 ...

  2. PAT B1027 打印沙漏(20)

    思路: 使用数组保存每一行沙漏的最大符号数 输入一个正整数和一个符号 遍历数组,找到大于正整数的数组下标 j. 三角形底边的字符数为 (j - 1) * 2 - 1 打印沙漏 打印剩余字符:x - n ...

  3. PAT B1027 打印沙漏 (20 分)

    本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐:相邻两 ...

  4. 【PAT】B1027 打印沙漏(20 分)

    #include<cstdio> #include<stdlib.h> char C='*'; int qiushu(int hang){//输入行数,求出字符数 int su ...

  5. PAT自测_打印沙漏、素数对猜想、数组元素循环右移、数字加倍重排、机器洗牌

    -自测1. 打印沙漏() 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号 ...

  6. PAT乙级 1027. 打印沙漏(20)

    1027. 打印沙漏(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求你写个程序把给定的符号打印成 ...

  7. PAT (Basic Level) Practise (中文)1027. 打印沙漏(20)

    1027. 打印沙漏(20) 时间限制 200 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求你写个程序把给定的符号打印成 ...

  8. PAT-乙级-1027. 打印沙漏(20)

    1027. 打印沙漏(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求你写个程序把给定的符号打印成 ...

  9. 团体程序设计天梯赛-练习集L1-002. 打印沙漏

    L1-002. 打印沙漏 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给 ...

随机推荐

  1. Android_小账本小结

    登录界面:支持登录.注册以及游客登录,单纯的小账本的话其实用不到这些个登录,单纯为了巩固学习知识. 尚未部署到服务器,账号等数据暂时保存在本地数据库中. 游客登陆:游客登录会直接跳到主页中,不影响使用 ...

  2. CQOI跳舞(网络流+二分答案)

    题面见 https://www.luogu.org/problemnew/show/P3153 题意简述:有n个男生,n个女生,每一首歌时两位男女配对,然后同一对男女只能跳一场,一个人只会与不喜欢的人 ...

  3. 在source insight project中删除文件夹或者文件的通用方法

    1.删除文件夹或者文件在硬盘上的数据 2.project->synchronize files...看到如下图,然后勾选remove missing files from project

  4. CentOS进行yum操作时不能访问国外镜像的解决方案

    1. 例如执行yum update,经常报错“Cound not resolve host: xxxxx”,一般都是yum源是使用的国外镜像,国内访问很不好.这时可以将源手动替换为国内的清华大学源,或 ...

  5. Vue前端挂载对象时一些思考

    最近,在Vue前端调试http请求,无论如何如何也是拦截不了某些http请求.场景是这样的:Java后端组装好Vue对象,然后送到前端,前端通过id来挂载该Vue对象,而该对象中有上传文件或者图片的控 ...

  6. js对象赋值

    看到一道题: 根据包名,在指定空间中创建对象 效果 namespace({a: {test: 1, b: 2}}, 'a.b.c.d') 结果 {a: {test: 1, b: {c: {d: {}} ...

  7. 理解LDAP与LDAP注入

    0x01 LDAP简介 LDAP,轻量目录访问协议 |dn :一条记录的位置||dc :一条记录所属区域||ou :一条记录所属组织||cn/uid:一条记录的名字/ID| 此处我更喜欢把LDAP和 ...

  8. LED Holiday Light-5 Mm Wide Angle Cone Lights: Pros

    But in rare cases, the opposite is true: the opinions of consultants are so synchronized that it is ...

  9. 记录 Docker 的学习过程 (日志篇)

    日志收集 elk 在node3上操作 docker pull sebp/elk:5610 node3# sysctl vm.max_map_count=262144 node3# docker run ...

  10. 设置Eclipse中的字符集为UTF-8

    Eclipse 修改字符集 默认情况下 Eclipse 字符集为 GBK,但现在很多项目采用的是 UTF-8,这是我们就需要设置我们的 Eclipse 开发环境字符集为 UTF-8, 设置步骤如下: ...