poj 2707 Copier Reduction
这题同样没什么好说的,注意几种特殊情况就好!另外就是关于如何控制输出“%”,这属于格式控制的范畴,这种东西不用刻意去记,不过应该积累。每天A题(特别是一A就过的感觉)非常爽!
贴代码
#include <stdio.h>
int main()
{
int a,b,c,d; //a*b mm原图,c*d mm纸
int temp;
double result;
while(scanf("%d%d%d%d",&a,&b,&c,&d))
{
if(a==0 && b==0 && c==0 && d==0)
break;
//首先明确一点:缩放的比例介于(1%,100%)之间,这意味着测试数据中只可能有缩小(或不变),不可能有放大
//分别把a、b和c、d由小到大放
if(a>b)
{
temp=a;
a=b;
b=temp;
}
if(c>d)
{
temp=c;
c=d;
d=temp;
}
//100%的情况
if(a<=c)
{
if(b<=d)
printf("100%%\n");
continue;
}
//剩余的都是正常的比较程序
else
{
if(double(c)/a<=double(d)/b)
result=double(c)/a;
else
result=double(d)/b;
if(result<=0.01)
printf("1%%\n");
else
printf("%d%%\n",int(result*100));
}
}
return 0;
}
另外我觉得自己有个习惯不错,就是不论多水的题目,我A过了以后都会去看看别人的结题报告,看看别人有木有更好的思路和小技巧可以学学,果然,这里有一个代码很精简,也贴上来学习
题意:给出两个矩形,a*b和c*d,问把a*b切掉一部分后能完全放进c*d的矩形中,a*b矩形能保留下来多少,保留整百分数。
先保证a<b c<d。。
(代码仅供参考和学习,请不要直接粘贴刷AC数,期待你写出更好的代码)
#include<iostream>
#include<cstdio>
using namespace std;
int a,b,c,d;
double ans;
int main()
{
while(scanf("%d%d%d%d",&a,&b,&c,&d),a||b||c||d)
{
ans=1.0;
if(a>b) swap(a,b);
if(c>d) swap(c,d);
ans=min(ans,min(double(c)/a,double(d)/b));
printf("%d%%\n",int(ans*100));
}
return 0;
}
最后更新:2017-04-03 14:53:37