您的位置:首页 > 其它

CODEFORCES problem 105A.Transmigration

2013-11-05 22:10 351 查看
题目本身上手并不难,字符串处理+简单的排序。要注意的地方是浮点数的处理。

依据计算机中浮点数的表示原理,在实际编程的过程中即使用一个确定的整数(假设是1)给一个浮点变量赋值 在查看变量时会发现实际存储的值是0.99999…….可以注意到在使用原来的EPX*k时也有可能出现这样的情况,本来是准确值应该是100,浮点运算却会得到 99.999……

由于k只有两位小数,因此一个整数乘上k,最多还是只有两位

我们令

新的经验new_epx=epx*k+0.001

当然可以用任何比0.01小的数,都能在不会影响正确结果的前提下修正错误结果。

#include<stdio.h>
#include<string.h>
#include<math.h>
char f[100][100];
int  c[100];
int main()
{
int n,m;
double k;
char s[30];
int x,t=0,i,j,flag;
scanf("%d %d %lf",&n,&m,&k);
for(i=1;i<=n;i++)
{
scanf("%s %d",s,&x);
if(x*k+0.001>=100)
{
t++;
strcpy(f[t],s);c[t]=floor(x*k+0.001);
}
}
for(i=1;i<=m;i++)
{
scanf("%s",s);
for(j=1,flag=0;j<=t;j++)
if(strcmp(s,f[j])==0){flag=1;break;}
if(!flag)
{
t++;
strcpy(f[t],s);
}
}
char ss[30];
int xx;
for(i=1;i<=t;i++)
for(j=i+1;j<=t;j++)
{
if(strcmp(f[i],f[j])>0)
{
strcpy(ss,f[i]);
strcpy(f[i],f[j]);
strcpy(f[j],ss);
xx=c[i];c[i]=c[j];c[j]=xx;
}
}
printf("%d\n",t);
for(i=1;i<=t;i++)
printf("%s %d\n",f[i],c[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: