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语句

    第四步:打印输出

原文地址:https://www.cnblogs.com/huangxing123/p/10345508.html

时间: 2024-08-02 01:42:10

PTA寒假一的相关文章

PTA寒假二

7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S.B.Q.W.Y分别代表拾.百.仟.万.亿.于是23108元应被转换输出为"cWdQbBai"元. 输入格式: 输入在一行中给出一个不超过9位的非负整数. 输出格式: 在一行中输出转换后的结果.注意"零"的用法必须

PTA寒假三

抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C),或者什么也不放(X).捕鼠夹可重复利用,不计成本,奶酪每块3元. 聪明的老鼠呢?它们每天可能会派出一只老鼠到墙角,看看墙角有啥: 若什么也没有(X),老鼠们就不高兴了(Unhappy),会有长达一天(也就是第二天)的不高兴期.在不高兴期间,不派出老鼠.不高兴期结束之后,派出老鼠. 若有捕鼠夹(T

PTA寒假编程第三题

抓老鼠啊~亏了还是赚了? 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C),或者什么也不放(X).捕鼠夹可重复利用,不计成本,奶酪每块3元. 聪明的老鼠呢?它们每天可能会派出一只老鼠到墙角,看看墙角有啥: 若什么也没有(X),老鼠们就不高兴了(Unhappy),会有长达一天(也就是第二天)的不高兴期.在不高兴期间,不派出老鼠.不高兴期结束之后,派出老鼠. 若有捕鼠夹(T),这只老鼠被

PTA寒假编程第一题

7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 * 所谓"沙漏形状",是指每行输出奇数个符号:各行符号中心对齐:相邻两行符号数差2:符号数先从大到小顺序递减到1,再从小到大顺序递增:首尾符号数相等. 给定任意N个符号,不一定能正好组成一个沙漏.要求打印出的沙漏能用掉尽可能多的符号. 输入格式: 输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔. 输出格式: 首先打印出由给定符

PTA寒假编程第二题

币值转换 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S.B.Q.W.Y分别代表拾.百.仟.万.亿.于是23108元应被转换输出为"cWdQbBai"元. 输入格式: 输入在一行中给出一个不超过9位的非负整数. 输出格式: 在一行中输出转换后的结果.注意"零"的用法必须符合中文习惯. 输入样

2017级面向对象程序设计寒假作业4

Deadline 2018.03.02 22:00 一.完成PTA题目集 题目集链接:https://pintia.cn/problem-sets/966322407656148992/problems 请独立完成,不要抄袭!助教会对提交的代码进行查重,若发现抄袭则倒扣分. 完成题目后请将提交结果的截图贴到下述博客的末尾. 二.自我总结博客 写一篇博客,作为在寒假中关于 C++ 已完成的自学内容的总结.博客中需要包括但不限于以下内容: 已学的内容总结 存疑的问题 花费的总时间 锻炼的代码行数 两

2020寒假训练计划

今天是2019年的最后一天了,按照计划.应当对Python有了初步了解,Linux基础操作比较熟悉. 是时候分一下方向了,首先看看各个方向该学些什么. Web PHP 在Web通常是以代码审计.PHP各种协议.特性等等情况出现.基础要求是看懂题中的PHP代码,然后要对题目中常见绕过方法有了解.因此,PHP语言上,要学习到面对对象,能了解PHP序列化和反序列化及各种魔法方法.还要多刷题,了解题目的一些常见的考点,针对考点学习. SQL 要学习SQL注入首先要会SQL的基础语法,SQL语法比较简单,

规划自己的寒假生活

因为对生活不会太好的规划,所以上b站看看相关的视频. 要想在寒假过的很好就要做到两点: 1.规划好自己的生活 2.主动把握机会 规划好自己的生活: 1.列出自己要做的两个最重要的目标: 健身 学习算法 学习英语 阅读 2.在每个方面列出最重要的五件事 健身 每天10点半睡觉,6点半起床 每天下午打一会篮球 早上起床跑步 中午看健康类资讯 注意自己的饮食,对饮食进行管理 学习算法 抱一个算法学习班,或者是牛客,或者是acwing,或者是冬令营 完成实验室的要求,每天两套cf,刷完pat. 刷蓝桥杯

大二寒假刷题随笔

7.5 学生成绩排序 假设学生的基本信息包括学号.姓名.三门课程成绩以及个人平均成绩,定义一个能够表示学生信息的结构类型.输入n(n<50)个学生的成绩信息,按照学生的个人平均分从高到低输出他们的信息.如果平均分相同,按输入的先后顺序排列. 输入格式: 输入一个正整数n(n<50),下面n行输入n个学生的信息,包括:学号.姓名.三门课程成绩(整数). 输出格式: 输出从高到低排序后的学生信息,包括:学号.姓名.平均分(保留两位小数). 输入样例: 3 101 Zhang 78 87 85 10