首页 > 学院 > 开发设计 > 正文

UVa 11100 The Trip

2019-11-08 02:37:19
字体:
来源:转载
供稿:网友

题目

这里写图片描述

花了比较长的时间,遇到些问题

double转换为int型时,总是会出现减1的情况,比如:t=15.01;a=(int)(t*100);得到的a=1500若t=15.11,则a=1510

在网上查阅资料知道: 首先 float double这类的数据是近似值 有精度问题 比如输入8.00时,可能实际值是7.99999··· 所以取整时少了1 此处原理类似,解决方法是采用(int)(a+0.5)的方式,这样取值就不会少1了

对于相差值在一美分内的条件,开始没有找到合适的处理方法,通过对余数以及多于平均值人数的比较,决定最终可以少交易多少美分

技巧:

在处理金额时,取小数两位不好处理,采取乘100再取整的方式,以美分为基本单位。便于处理结尾的小项金额。

代码

#include<stdio.h>int main(){ int a[1001],n,i,ave,sum,c,r,ans; double tmp,change; while(1){ scanf("%d",&n); if(n==0) break; sum=0; c=0; ans=0; for(i=0;i<n;i++) { scanf("%lf",&tmp); a[i]=(int)(tmp*100+0.5); sum+=a[i]; } r=sum%n; ave=sum/n; for(i=0;i<n;i++) { if(a[i]>ave){ c=c+(a[i]-ave); ans++; } } if(r<ans) c-=r; else c-=ans; change=(double)c/100; PRintf("$%.2lf/n",change); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表