题目本身上手并不难,字符串处理+简单的排序。要注意的地方是浮点数的处理。
依据计算机中浮点数的表示原理,在实际编程的过程中即使用一个确定的整数(假设是1)给一个浮点变量赋值 在查看变量时会发现实际存储的值是0.99999…….可以注意到在使用原来的EPX*k时也有可能出现这样的情况,本来是准确值应该是100,浮点运算却会得到 99.999……
由于k只有两位小数,因此一个整数乘上k,最多还是只有两位
我们令
新的经验new_epx=epx*k+0.001
当然可以用任何比0.01小的数,都能在不会影响正确结果的前提下修正错误结果。
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 char f[100][100]; 5 int c[100]; 6 int main() 7 { 8 int n,m; 9 double k; 10 char s[30]; 11 int x,t=0,i,j,flag; 12 scanf("%d %d %lf",&n,&m,&k); 13 for(i=1;i<=n;i++) 14 { 15 scanf("%s %d",s,&x); 16 if(x*k+0.001>=100) 17 { 18 t++; 19 strcpy(f[t],s);c[t]=floor(x*k+0.001); 20 } 21 } 22 for(i=1;i<=m;i++) 23 { 24 scanf("%s",s); 25 for(j=1,flag=0;j<=t;j++) 26 if(strcmp(s,f[j])==0){flag=1;break;} 27 if(!flag) 28 { 29 t++; 30 strcpy(f[t],s); 31 } 32 } 33 char ss[30]; 34 int xx; 35 for(i=1;i<=t;i++) 36 for(j=i+1;j<=t;j++) 37 { 38 if(strcmp(f[i],f[j])>0) 39 { 40 strcpy(ss,f[i]); 41 strcpy(f[i],f[j]); 42 strcpy(f[j],ss); 43 xx=c[i];c[i]=c[j];c[j]=xx; 44 } 45 } 46 printf("%d ",t); 47 for(i=1;i<=t;i++) 48 printf("%s %d ",f[i],c[i]); 49 return 0; 50 }