PTA寒假一
7-1 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
2
实验代码
#include<stdio.h>
int main(){
//定义代码所需要的变量
//temp=7是打印沙漏图形至少所需的符号量,a=3为最小沙漏图形的行数
int number,temp=7,a=3;
char ch;
int yemp1,yemp2;
scanf("%d %c",&number,&ch);
//如下部分代码是为了确定给定的数可以打印出最大沙漏的行数
do{
//先判断给定的数number是否可以打印沙漏图形
if(number>=temp){
//判断给定的数number是否可以打印下一个更大的沙漏图形
if(number<(temp+2(a+2))){
break;
}
//如果恰好可以打印下一个更大的沙漏,则将行数改为那个更大沙漏图形的行数,跳出循环
else if(number==(temp+2(a+2))){
temp=(temp+2(a+2));
a=a+2;
break;
}
//如果给出的数比下一个更大的沙漏图像所需要的符号数还要大,则将其的行数变为下一个沙漏图像的行数,在进行下一次的循环
else{
temp=(temp+2(a+2));
a=a+2;
}
}
}while(1);//如下的代码根据所给定的行数打印出与此相匹配的沙漏图像
//i代表行数,j代表列数
//在如下的代码中之所以引入yemp1,yemp2的原因是因为,将比较大的行转化为比较小行的操作中需要用到,因为不能直接对代表行数的i,j进行直接的操作,假使这样做会是使源代码无限循环
for(int i=0;i<a;i++){
yemp1=i;
//如果行数大于a/2(即中心行),那么将该行转化为与此行一样的更小的行,转换的规则为: yemp1=a-yemp1-1;
if(yemp1>a/2){
yemp1=a-yemp1-1;
}
for(int j=0;j<a;j++){
//如果列数大于a/2(即中心列),那么将该列转化为与此列一样的更小的列,转换的规则为: yemp2=a-yemp2-1;
yemp2=j;
if(yemp2>a/2){
yemp2=a-yemp2-1;
}
//如果转换为等效列的列数yemp2小于行数yemp1,
if(yemp2<yemp1){
//如果列数大于 a/2(中心列),则跳行,跳出循环(其实这里也可以输出空格的,然后在列的末尾跳行,只不过为了减少循环而选择将沙漏图形后面的空格用换行代替)
if(j>a/2){
printf("\n");
break;
}
//如果列数小于 a/2(中心列),则输出空格
else{
printf(" ");
}
}
//如果转换为等效列的列数yemp2大于等于行数yemp1,则输出字符
else{
printf("%c",ch);
}
//末尾列换行
if(j==a-1){
printf("\n");
}
}
}
//输出多余的符号
printf("%d\n",number-temp);
}
思路
第一步:定义变量
第二步:因为跟以前的倒三角类似,所以运用了类似的方法;
第三步:运用while语句
第四步:打印输出
三.本题调试过程碰到问题及解决办法
跟以前的倒三角类似,所以运用了类似的方法,然后参考别人的才做出来
4、运行结果截图
时间过了......
PTA寒假一的更多相关文章
- pta寒假作业3
题目三:捉老鼠啊,亏了还是赚了 实验代码 #include <stdio.h> #include <stdlib.h> int main(void) { ...
- pta寒假作业2
题目二币值转换 题目代码 #include<stdio.h> int main (void) { int n, initial_n; scanf("%d", & ...
- PTA寒假三
抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C ...
- PTA寒假二
7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简 ...
- 2018秋寒假作业6—PTA编程总结3
1.实验代码 7-1 抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T) ...
- 寒假pta一
打印沙漏 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐 ...
- 寒假作业 pta编程总结3
实验代码: 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C),或者什么也不放(X).捕 ...
- 寒假作业 pta编程总结2
实验代码: #include<stdio.h>#include<stdbool.h> void toNUM(int n);void toUNIT(int n); int mai ...
- 2018秋寒假作业5—PTA编程总结2
1.实验代码: 7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌&qu ...
随机推荐
- HDU 5333 Undirected Graph(动态树)
题意 给定一棵 \(n\) 个节点, \(m\) 条边的无向图,每个点有点权,有 \(q\) 个询问,每次询问若删去存在一个节点权值在 \([L,R]\) 范围外的边,剩下的图构成了多少个连通块(询问 ...
- msvc命令行cl编译c程序问题及解决
1.cmd命令行cl提示没有这玩意儿 装上Visual Studio之类 2.cl main.c提示缺dll everything搜dll所在路径,在环境配置PATH增加对应bin.IDE 3.cl ...
- spring初体验 一之helloworld
今天开始学习spring,每天都会将自己学习的一些内容,或是一些总结以博客的形式记录下来,方便自己以后回顾,如果能给他人学习带来丁点的帮助那也是最好不过了.本系列博文的spring学习是基于4.0版本 ...
- git 管理和存储二进制大文件
git 管理二进制文件 本文档将逐步带你体验 git 的大文件管理方式. 环境: windows10 64位 cmd git版本: git version 2.18.0.windows.1 创建到推送 ...
- Docker for windows10 配置阿里云镜像
到官网下载 并且 安装 Docker for windows (注意 官方要求 windows10 是企业版才行 天朝你懂的 ) 关于 Docker for windows 要求有 带有 hy ...
- 一个数组中两个数的和为N,找出这两个数字的下标
分析,两个数字的和为N.那么这两个数字是否是唯一的呢?输出的下标是否是第一对出现的呢? 1,我们假设这两个数字是唯一的 和是唯一的,那么其中一个数字越大,另一个数字就越小.想到大小关系,我们就想到了排 ...
- Promise 异步函数的加上外壳终止Promise
//promise异步函数的请求终止 export default function markCancleble(promise){ let hasCanceled_ = false ; const ...
- 简单粗暴的上传项目至 Github
嗯,写了一个项目,觉得还OK,就想放在 Github 继续维护和方便使用,那么如何简单快速的将代码上传至 Github 上? 1. 你得有自己的 Github账号,如何创建账号这里就不说了.因为.. ...
- 第 8 章 容器网络 - 067 - 如何部署 Calico 网络?
0.准备工作 Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来. 与 VxLAN 不同的是,Cal ...
- e1000e 网卡如遇到大包未线速问题解法
e1000e 网卡如遇到大包(>1280)未线速,把'DEFAULT_ITR'改为0, 不设中断频率上限试试 see@intel/e1000e/param.c/* Interrupt Throt ...