这题同样没什么好说的,注意几种特殊情况就好!另外就是关于如何控制输出“%”,这属于格式控制的范畴,这种东西不用刻意去记,不过应该积累。每天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; }