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寒假一的更多相关文章

  1. pta寒假作业3

    题目三:捉老鼠啊,亏了还是赚了 实验代码 #include <stdio.h>     #include <stdlib.h> int main(void)    {      ...

  2. pta寒假作业2

    题目二币值转换 题目代码 #include<stdio.h> int main (void) { int n, initial_n; scanf("%d", & ...

  3. PTA寒假三

    抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C ...

  4. PTA寒假二

    7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简 ...

  5. 2018秋寒假作业6—PTA编程总结3

    1.实验代码 7-1 抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T) ...

  6. 寒假pta一

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

  7. 寒假作业 pta编程总结3

    实验代码: 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C),或者什么也不放(X).捕 ...

  8. 寒假作业 pta编程总结2

    实验代码: #include<stdio.h>#include<stdbool.h> void toNUM(int n);void toUNIT(int n); int mai ...

  9. 2018秋寒假作业5—PTA编程总结2

    1.实验代码: 7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌&qu ...

随机推荐

  1. LINQ to Entities 不识别方法“System.String get_Item(Int32)”,因此该方法无法转换为存储表达式。

    1.LINQ to Entities 不识别方法“System.String get_Item(Int32)”,因此该方法无法转换为存储表达式.项目中发现linq to entities 不识别? , ...

  2. 廖雪峰 JavaScript 学习笔记(判断、循环)

    条件判断  固定格式:if () { ... } else { ... } ,else可选 1.多行条件判断,通常把else if连写在一起,来增加可读性 例子: var age = 3; if (a ...

  3. 绑定方法与非绑定方法 classmethod和staticmethod

    一:绑定方法:特点:绑定给谁就应该是由谁来调用,谁来调用就会将谁当做第一个参数传入 1:绑定给对象的方法:类中定义的函数默认就是绑定给对象的 例:        2:绑定给类的方法:为类中定义的函数加 ...

  4. Series 和 Dataframe 的 rank 方法

    rank 方法返回的是当前数据的排名名次,而 sort——values() 返回的是排名之后数据的结果 rank()用法 sort_values()用法

  5. loadrunner中面向目标场景的设计

    在一个面向目标的方案中,可以定义五种类型的目标:虚拟用户数.每秒点击次数(仅 Web Vuser).每秒事务数.每分钟页面数(仅 Web Vuser)或方案的事务响应时间.使用“编辑方案目标”对话框可 ...

  6. inline-block有间隙的兼容处理

  7. ES6的小知识(后半部分)

    一.iterator和for-of循环 在js里有数组和对象,es6又新出现了set和map这样js就有了四种数据集合,这样可以组合使用他们,比如数组里拥有对象,set等,这样就需要一个统一的 接口机 ...

  8. 版本控制 version control

    而版本控制能记录所有的操作,如创建删除增加,并能返回到之前的版本.版本控制通常需要同一些远程仓库配合使用,如GitHub 廖雪峰教学有 https://www.liaoxuefeng.com/wiki ...

  9. Angular4学习笔记(七)- ViewChild和ViewChildren

    基础 ViewChild ViewChild 装饰器用于获取模板视图中的元素或直接调用其组件中的方法.它支持 Type 类型或 string 类型的选择器,同时支持设置 read 查询条件,以获取不同 ...

  10. legend2---开发日志10(ajax请求的方法是否同样会执行base控制器里面的方法)

    legend2---开发日志10(ajax请求的方法是否同样会执行base控制器里面的方法) 一.总结 一句话总结:会执行的,所以写base控制器里面的方法要注意,base控制器里面的方法要以查数据为 ...