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 2155 Matrix (二维树状数组)
这是楼教主出的二维线段树或者是二维树状数组的题,题意很简单,就是有个n*n的矩阵,初始值都是0,然后给你两个操作,一个是给你左上角和右下角的坐标,把这个长方形的区间所有元素反取反(0变1 1变0),另一个是求某个具体坐标的值。 这里我用了二维的线树状数组,一维树状数组可以解决区间更新和点查询的问题,这里只需要加一维就可以了,代码比较好写,不过开始犯了很多低级的错误。
42 0
UVa10484 - Divisibility of Factors(数论)
UVa10484 - Divisibility of Factors(数论)
64 1
|
存储 C语言
POJ1521---Entropy
POJ1521---Entropy
POJ 1306 Combinations
POJ 1306 Combinations
114 0
|
算法
LeetCode - 37. Sudoku Solver
37. Sudoku Solver  Problem's Link  ---------------------------------------------------------------------------- Mean:  求解数独.
956 0
POJ 1306 Combinations
Description Computing the exact number of ways that N things can be taken M at a time can be a great challenge when N and/or M become very large.
643 0