ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HNUST-OJ-1690-千纸鹤

2021-12-24 09:02:18  阅读:139  来源: 互联网

标签:OJ int 样例 长方形 正方形 XX HNUST 千纸鹤


题目描述:

圣诞节快到了,校园里到处弥漫着粉红色的气息。又是一个情侣秀恩爱的节日。
作为一只在双十一剁手的单身狗,XX只能望着空荡荡的钱包欲哭无泪。

XX琢磨着,得趁圣诞节的时候赚点外快,不然真得喝西北风去了。

但是能赚什么外快呢?批发苹果?没本金;卖贺卡?没本金;许愿灯?还是没本金……想来想去,做什么都没!本!金!这个残酷的世界啊,还给不给单身狗活路了!!!

最后还是心灵手巧,多才多艺的室友给了XX灵感——对,没错,就是题目——千纸鹤!

和其他的比起来,千纸鹤成本低廉到可以忽略不计。而最丧心病狂的是,XX为了节约成本,她都没直接去买可以叠千纸鹤的方块纸,而是自己买了白纸回来裁!!

而XX那奇葩的审美,让她觉得千纸鹤折越大越好看。所以她裁剪的时候,都是裁一块最大面积的正方形出来折千纸鹤。然后下一次又在剩余的纸中继续裁一块最大的正方形。

那么问题来了,一块长a宽b的长方形纸,在折完k只千纸鹤以后,还剩多大?

例如长为7宽为3的纸片,折完3只千纸鹤后,剩下的纸片为长2宽1。

 输入:

输入只有一行,包括三个整数 a, b, k (0 < b <= a <= 10,000),分别表示纸片的长,宽,以及千纸鹤的个数。保证数据合法。

输出:

输出一行运算结果,结果为两个整数,分别表示剩余白纸的长和宽,数字以空格隔开,末尾要换行(长 >= 宽)。

样例输入:

1 1 1

样例输出:

 0 0

解题思路:

 虽然前面的情景描述看起来冗长没用(确实有些冗长,也确实没用),但这题的解体想法却一点不冗长。

假设已知长方形的长为a,宽为b。

想要使得到的正方形达到最大值,即要将长方形的宽b作为新正方形的边长,那么经过裁剪后得到的新长方形其中两条边长为k=a-b,另外两条边长为依然为a。

这个时候就要分情况考虑了。

一种是k>b的时候,那么我们就将k赋给长a,宽b依然为b。

另一种则是k<=b的时候,那么我们就将原宽b作为新长方形的长a,将k作为新长方形的b。

值得注意的是,但其中一条边变为零的时候,另一条边也将变成零(即样例输入和样例输出)

 实现代码:

#include<stdio.h>
int main(void)
{
    int a,b,k;
    scanf("%d%d%d",&a,&b,&k);
    while(k--)
    {int k=a-b;
        if(k>b)
        {
            a=k,b=b;
        }
        else
        {
            a=b;
            b=k;
        }
    }
    if(b==0)a=0;//也可以放到上面的循环内,当其中一条边为0时,就break
    printf("%d %d",a,b);



}

标签:OJ,int,样例,长方形,正方形,XX,HNUST,千纸鹤
来源: https://blog.csdn.net/abc_dot/article/details/122120487

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有