Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21775
  • 博文数量: 12
  • 博客积分: 271
  • 博客等级: 二等列兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-05 11:17
文章分类

全部博文(12)

文章存档

2012年(12)

我的朋友
最近访客

分类:

2012-05-21 20:00:25

原文地址:2012级第一次训练题解 作者:ACPrimer

POJ 1003 Hangover
题意: 求n使得1/2+1/3+...+1/n>=x.

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     double x,ans;
  5.     int i;
  6.     while(scanf("%lf",&x) && x>0)
  7.     {
  8.         ans=0.0;
  9.         for(i=2;ans<x;i++) ans+=1.0/i;
  10.         printf("%d card(s)\n",i-2);
  11.     }
  12.     return 0;
  13. }
 
POJ 1004 Financial Management
题意: 求12个浮点数的平均值.

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     double ans=0.0,x;
  5.     int i;
  6.     for(i=0;i<12;i++)
  7.     {
  8.         scanf("%lf",&x);
  9.         ans+=x;
  10.     }
  11.     printf("$%.2lf\n",ans/12);
  12.     return 0;
  13. }
 
POJ 1005 I Think I Need a Houseboat
题意: 如图,一个海岸线从原点开始以半圆形扩展,每年50平方英里的速度.给你一个点(x,y),求出覆盖到该点的时间.

思路: 求出经过点(x,y)的半圆形的面积,除以50然后向上取整就是最终结果.不过此题的数据不是特别强,所以对结果向下取整再加1也对.

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <math.h>
  3. #define PI 3.1415926
  4. int main()
  5. {
  6.     int T,ncase=0,ans;
  7.     double x,y,r;
  8.     scanf("%d",&T);
  9.     while(T--)
  10.     {
  11.         scanf("%lf%lf",&x,&y);
  12.         r=sqrt(x*x+y*y);
  13.         ans=(int)ceil(PI*r*r/2/50);
  14.         printf("Property %d: This property will begin eroding in year %d.\n",++ncase,ans);
  15.     }
  16.     printf("END OF OUTPUT.\n");
  17.     return 0;
  18. }
 
POJ 1007 DNA Sorting
题意: 给出m个长度都为n的DNA字符串,按照每个字符串的逆序数从小到大排序(如果逆序数相同则按照给出的顺序输出).
思路: 这一题主要是考察稳定排序(排序后关键字相同的元素按照原来的顺序排列).可以直接使用比较简单的冒泡排序,选择排序,也可以使用效率较高的快速排序(C语言库函数中的qsort()).
但是qsort()是不稳定的排序,可以通过增加一个下标使之成为稳定排序.

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct{
  4.     char s[52];
  5.     int x,id;
  6. }dna;
  7. dna a[102];
  8. int cal(char s[])
  9. {
  10.     int i,j,ans=0;
  11.     for(i=0;s[i];i++)
  12.         for(j=0;j<i;j++) if(s[i]<s[j])
  13.             ans++;
  14.     return ans;
  15. }
  16. int cmp(const void *a,const void *b)
  17. {
  18.     dna aa=*(dna *)a;
  19.     dna bb=*(dna *)b;
  20.     if(aa.x!=bb.x) return aa.x-bb.x;
  21.     return aa.id-bb.id;
  22. }
  23. int main()
  24. {
  25.     int n,m,i;
  26.     scanf("%d%d",&m,&n);
  27.     for(i=0;i<n;i++)
  28.     {
  29.         scanf("%s",a[i].s);
  30.         a[i].x=cal(a[i].s);
  31.         a[i].id=i;
  32.     }
  33.     qsort(a,n,sizeof(a[0]),cmp);
  34.     for(i=0;i<n;i++) printf("%s\n",a[i].s);
  35.     return 0;
  36. }

阅读(333) | 评论(0) | 转发(0) |
0

上一篇:Hello World!

下一篇:2012.5.21第一次训练题

给主人留下些什么吧!~~