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小的数,都能在不会影响正确结果的前提下修正错误结果。
依据计算机中浮点数的表示原理,在实际编程的过程中即使用一个确定的整数(假设是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; }
相关文章推荐
- 多线程下载
- HD1052
- 回文判断
- android 开发工具分享
- 关于MapReduce
- 框架搭建1-----spring3+hibernate4+mysql
- 【Qt学习笔记】Qt+VS2010的配置
- SQL删除重复数据只保留一条语句
- 【Qt学习笔记】Qt+VS2010的配置
- Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor
- Distributed Management Task Force----分布式管理任务组
- 初识Hadoop
- 深入理解指针函数
- 关闭一些不用的端口
- InChatter系统之服务器开发(二)
- div高度自适外层div高度随里层div高度自适
- SQL TOP分页
- 磨刀不误砍柴工——VS生成事件
- URAL 1971 Graphics Settings
- 填个许久的坑,计算表达式的值