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

全部博文(12)

文章存档

2012年(12)

我的朋友

分类: C/C++

2012-05-30 13:30:56

总结:第一题深受“运行时错误”困扰, 问题到现在都还没有解决;最后一题还在纠结中,为了避免运行时错误,已经取消了子函数的设计,在主函数中完成所有操作,输入输出格式也有改进,但还未得到正确结果;字典那道题已经有了些想法,近期会尝试编一下。


第二题 POJ 2388 Who's in the Middle

本题较易,没有特殊思路

点击(此处)折叠或打开

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

  3. int cmp(const void *a, const void *b);

  4. int main ()
  5. {
  6.     int i,n,cow[10000];
  7.     scanf("%d",&n);
  8.     for (i=0;i<n;i++)
  9.         scanf("%d",&cow[i]);
  10.     qsort(cow,n,sizeof(int),cmp);
  11.     n=(n-1)/2;
  12.     printf("%d",cow[n]);
  13.     return 1;
  14. }

  15. int cmp(const void *a, const void *b)
  16. {
  17.     return (*(int *)a-*(int *)b);
  18. }

第三题 POJ 2390 Bank Interest

本题可以尝试使用pow()函数,要比使用循环高效些。

点击(此处)折叠或打开

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

  3. int main ()
  4. {
  5.     int r,m,y,ans;
  6.     double rf,sum;
  7.     scanf("%d%d%d",&r,&m,&y);
  8.     sum=m;
  9.     rf=r/100.0+1;
  10.     for (;y>0;y--)
  11.     {
  12.         sum*=rf;
  13.     }
  14.     ans=floor(sum);
  15.     printf("%d",ans);
  16.     return 1;
  17. }

第四题 POJ 1012 Joseph

本题过程较繁琐,但拆分成每一步之后都不难实现:
第一步:将好人坏人按要求排列好(使用数组实现)。
第二步:消去要求的人。
第三步:对数组重排(即补充消去的人的位置)
用循环对每一个可能的数进行测试即可。
最后将所有可能取值保存到数组中(否则运行时会超时)。 


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int a[30]={2};
  3. int judge (int n,int k);

  4. int main ()
  5. {
  6.     int i,k=3,b[14];
  7.     for(k=1;k<14;k++)
  8.         for (i=1;;i++)
  9.         {
  10.             if (judge(i,k))
  11.             {
  12.                 b[k]=i;
  13.                 break;
  14.             }
  15.         }
  16.     while (scanf("%d",&k)&& k)
  17.         printf("%d\n",b[k]);
  18.     return 1;
  19. }

  20. int judge (int n,int k)
  21. {    
  22.     int sumnow,i,j;
  23.     for (i=1;i<=k;i++)
  24.         a[i]=1;
  25.     sumnow=2*k;
  26.     i=0;
  27.     while (sumnow!=k)
  28.     {
  29.         i=i+n;
  30.         if (i>sumnow)
  31.             i=i%sumnow;
  32.         if (i==0)
  33.             i=sumnow;
  34.         if (a[i]==1)
  35.             break;
  36.         else
  37.             a[i]=0;
  38.         for (j=k;j<sumnow-1;j++) //实现重排列
  39.         {
  40.             if (a[j]==0)
  41.                 for (;j<sumnow-1;j++)
  42.                     a[j]=a[j+1];
  43.         }
  44.         sumnow--;
  45.         i--;
  46.     }
  47.     if (sumnow==k)
  48.         return 1;
  49.     else return 0;
  50. }


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

上一篇:第一次训练题

下一篇:第三次训练赛

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