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;
}


你可能感兴趣的:(poj 2707 Copier Reduction)