Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21108
  • 博文数量: 12
  • 博客积分: 288
  • 博客等级: 二等列兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-04 18:52
文章分类

全部博文(12)

文章存档

2012年(12)

我的朋友

分类: C/C++

2012-05-24 21:57:00

第一次训练赛的附加题
 
第一题POJ 1003 Hangover
求n使得1/2 1/3 ... 1/n>=x.


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <math.h>

  3. int main ()
  4. {
  5.     int ans;
  6.     double in,sum=0;
  7.     while (scanf("%lf",&in)&&fabs(in)>1e-5) //本行见注释
  8.     {
  9.         ans=1;
  10.         while (sum<in)
  11.         {
  12.             ans ;
  13.             sum =1.0/ans;
  14.         }
  15.         printf("%d card(s)\n",ans-1);
  16.         sum=0;
  17.     }
  18.     return 1;
  19. }

注释:记得以前好像在哪里看到过说浮点数不会完全等于0,所以使用了fabs函数,不知道是否有必要?
 
第二题POJ 1004 Financial Management
求12个浮点数的平均值.


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main ()
  3. {
  4.     int n=12;
  5.     float in,ans=0;
  6.     for (;n>0;n--)
  7.     {
  8.         scanf("%f",&in);
  9.         ans+=in;
  10.     }
  11.     ans/=12;
  12.     printf("$%.2f\0",ans);
  13.     return 1;
  14. }


 

 
第三题POJ 1005 I Think I Need a Houseboat
题意: 如图,一个海岸线从原点开始以半圆形扩展,每年50平方英里的速度.给你一个点(x,y),求出覆盖到该点的时间.
 
思路:
引用下学长: 求出经过点(x,y)的半圆形的面积,除以50然后向上取整就是最终结果.不过此题的数据不是特别强,所以对结果向下取整再加1也对.
 
是否可以理解为:向上取整不一定等于向下取整加1?

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <math.h>
  3. #define PI 3.1416

  4. float area (float x,float y);
  5. int main ()
  6. {
  7.     int ans,T,n=1;
  8.     float x,y;
  9.     scanf("%d",&T);
  10.     while (n<=T)
  11.     {
  12.         scanf("%f%f",&x,&y);
  13.         ans=ceil(area(x,y)/50);
  14.         printf("Property %d: This property will begin eroding in year %d.\n",n,ans);
  15.         n++;
  16.     }
  17.     printf("END OF OUTPUT.");
  18.     return 1;
  19. }


  20. float area (float x,float y)
  21. {
  22.     float r2,s;
  23.     r2=x*x+y*y;
  24.     s=PI*r2/2;
  25.     return s;
  26. }
 
第四题:POJ 1007 DNA Sorting
题意: 给出m个长度都为n的DNA字符串,按照每个字符串的逆序数从小到大排序(如果逆序数相同则按照给出的顺序输出).
思路:
引用学长:这一题主要是考察稳定排序(排序后关键字相同的元素按照原来的顺序排列).可以直接使用比较简单的冒泡排序,选择排序,也可以使用效率较高的快速排序(C语言库函数中的qsort()).
但是qsort()是不稳定的排序,可以通过增加一个下标使之成为稳定排序.

程序中使用了冒泡排序


 

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. struct DNA
  4. {
  5.     char s[50];
  6.     int sorted;
  7. }dna[100],ls;

  8. int main ()
  9. {
  10.     int temp,i,j,m,n;
  11.     scanf("%d%d",&n,&m);
  12.     getchar();
  13.     for (temp=0;temp<m;temp++)
  14.     {
  15.         dna[temp].sorted=0;
  16.         gets(dna[temp].s);
  17.         for (i=0;i<n-1;i++)
  18.             for (j=i+1;j<n;j++)
  19.                 if (dna[temp].s[i]>dna[temp].s[j])
  20.                     dna[temp].sorted++;
  21.     }
  22.     for (i=0;i<m-1;i++)
  23.         for (j=0;j<m-i-1;j++)
  24.             if(dna[j].sorted>dna[j+1].sorted)
  25.             {
  26.                 ls=dna[j];
  27.                 dna[j]=dna[j+1];
  28.                 dna[j+1]=ls;
  29.             }
  30.     for (temp=0;temp<m;temp++)
  31.     {
  32.         puts(dna[temp].s);
  33.     }
  34.     return 1;
  35. }


 

 



阅读(342) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~