首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >打印沙漏,仅仅只用十八行,这是什么高级操作!(附好友更新小鱼航程)

打印沙漏,仅仅只用十八行,这是什么高级操作!(附好友更新小鱼航程)

作者头像
小Bob来啦
发布于 2020-12-16 14:28:51
发布于 2020-12-16 14:28:51
6900
举报

最近重新看了以前写的一些代码,总是感觉还不够简单,也有朋友向我反映沙漏的代码可以改进,经过我突破九九八十一道关卡,终于弄出来了沙漏的最终版本,仅用十八行代码,在这里向大家公布啦。(附:朋友更新的小鱼航程代码)

题目要求:

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

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

输入格式:

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

输出格式:

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

输入样例:

代码语言:javascript
复制
19 *

输出样例:

代码语言:javascript
复制
*****
 ***
  *
 ***
*****
2

源代码如下:

代码语言:javascript
复制
#include<stdio.h>
#include<math.h>
void p(char f,int count){
while(count-->0)putchar(f);//f为打印的字符
}
int main()
{ int n, f,h,i;
scanf("%d %c",&n,&f);
 h= (int)sqrt((n + 1)/2);
 for (i = 1-h; i < h; i++){
 int j=abs(i);//abs为打印i的绝对值
 p(' ',h-1-j);
 p(f,2*j+1);
 putchar('\n');
 }
 printf("%d",n-(2*h*h-1));
 return 0;
 }

运行结果如下:

好友推荐:

点击下面即可进入查看题目:

C语言解题之小鱼的航程

由于朋友要求匿名哈,这里就不@了。(看到第七行,小编果断要求上榜)

代码展示如下:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int week,n,sum;
    sum=0;
    scanf("%d %d",&week,&n);//week为小鱼游泳的第一天,n为游泳总天数
    while(1){//小编认为这里处理得非常巧妙哦
        if(week!=6&&week!=7){
            sum=sum+250;
        }
        if(week==7){
            week=1;
        }
        else{
            week++;
        }
        n--;
        if(n==0){
            break;
        }
    }
    printf("%d",sum);
return 0;
}

感谢大佬带来更简洁更让人易懂的代码。

也欢迎更多的伙伴在公众号后台留下你们的code,小编会为你们一一检查的哦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 输入格式:
  • 输出格式:
  • 输入样例:
  • 输出样例:
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档