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

全部博文(12)

文章存档

2012年(12)

我的朋友

分类: C/C++

2012-05-30 14:57:26

本次没有特殊的题目,获得的知识与技巧将会在下一篇总结性质的博文中给出,本篇仅用作代码记录。

第一题POJ 1207 The 3n+1 problem


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int judge (int n); //用于返回循环次数

  3. int main ()
  4. {
  5.     int n,k,i,max=0,temp=0,ma,mi;
  6.     while (scanf("%d%d",&n,&k)!=EOF)
  7.     {
  8.         
  9.         if (n<=k)
  10.         {
  11.             ma=k;
  12.             mi=n;
  13.         }
  14.         else
  15.         {
  16.             ma=n;
  17.             mi=k;
  18.         }
  19.         for (i=mi;i<=ma;i++)
  20.         {
  21.             temp=judge(i);
  22.             if (temp>max)
  23.                 max=temp;
  24.         }
  25.         printf("%d %d %d\n",n,k,max);
  26.         max=0;
  27.         temp=0;
  28.     }
  29.     return 1;
  30. }


  31. int judge (int n)
  32. {
  33.     int i=0;
  34.     while (n!=1)
  35.     {
  36.         i++;
  37.         if (n%2==1)
  38.             n=3*n+1;
  39.         else
  40.             n/=2;
  41.     }
  42.     i++;
  43.     return i;
  44. }

第二题POJ 1218 THE DRUNK JAILER

本题关键:每一次循环后初始化数组!


点击(此处)折叠或打开

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

  3. int a[103]; //用0表示关,1表示开

  4. int main ()
  5. {
  6.     int i,T,n,temp=0;
  7.     scanf("%d",&T);
  8.     while (T--)
  9.     {
  10.         memset(a,0,sizeof(a)); //每一次循环初始化数组
  11.         scanf("%d",&n);
  12.         for (i=1;i<=n;i++)
  13.         {
  14.             temp=i;
  15.             while (temp<=n)
  16.             {        
  17.                 if (a[temp]==0)
  18.                     a[temp]=1;
  19.                 else a[temp]=0;
  20.                 temp+=i;
  21.             }
  22.         }
  23.         temp=0;
  24.         for (i=1;i<=n;i++)
  25.         {
  26.             if (a[i]==1)
  27.                 temp++;
  28.         }
  29.         printf("%d\n",temp);
  30.         temp=0;
  31.     }
  32.     return 1;
  33. }

第三题POJ 3094 Quicksum


点击(此处)折叠或打开

  1. #include <stdio.h>


  2. int main ()
  3. {
  4.     char ch;
  5.     int sum=0,k,i=1;
  6.     while(scanf("%c",&ch)&&
  7.     {
  8.         if (ch=='\n')
  9.         {
  10.             printf("%d\n",sum);
  11.             i=1;
  12.             sum=0;
  13.         }
  14.         else
  15.         {
  16.             if (ch==' ')
  17.                 k=0;
  18.             else
  19.                 k=ch-'A'+1;
  20.             sum+=i*k;
  21.             i++;
  22.         }    
  23.     }
  24.     return 1;
  25. }

第四题POJ 2350 Above Average


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. double a[1003];

  3. int main ()
  4. {
  5.     int T,t,i,num=0;
  6.     double sum=0;
  7.     scanf("%d",&T);
  8.     while (T--)
  9.     {
  10.         sum=0;
  11.         scanf("%d",&t);
  12.         for (i=0;i<t;i++)
  13.         {
  14.             scanf("%lf",&a[i]);
  15.             sum+=a[i];
  16.         }
  17.         sum/=t;
  18.         for (i=0,num=0;i<t;i++)
  19.         {
  20.             if (a[i]>sum)
  21.                 num++;
  22.         }
  23.         sum=1.0*num/t;
  24.         printf ("%.3lf%%\n",sum*100);
  25.     }
  26.     return 1;
  27. }

第五题POJ 1833 排列


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <algorithm>
  4. using namespace std;

  5. int a[1030];


  6. int main ()
  7. {
  8.     int n,k,T,i;
  9.     scanf("%d",&T);
  10.     while (T--)
  11.     {
  12.         scanf("%d%d",&n,&k);
  13.         for (i=0;i<n;i++)
  14.             a[i]=i;
  15.         for (i=0;i<n;i++)
  16.             scanf("%d",&a[i]);
  17.         for (i=0;i<k;i++)
  18.             next_permutation(a,a+n);
  19.         for (i=0;i<n;i++)
  20.         {
  21.             printf("%d",a[i]);
  22.             if (i!=n-1)
  23.                 printf(" ");
  24.             else
  25.                 printf("\n");
  26.         }
  27.     }
  28.     return 1;
  29. }


第六题POJ 2608 Soundex

关于本题技巧,详见总结 


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. char c[22];

  3. int main ()
  4. {
  5.     int i;
  6.     while (scanf("%s",c)!=EOF)
  7.     {
  8.         for(i=0;c[i]!=0;i++)
  9.         {
  10.             switch (c[i])
  11.             {
  12.             case 'B':case 'F':case 'P':case 'V': c[i]='1';break;
  13.             case 'C':case 'G':case 'J':case 'K': case 'Q':case 'S':case 'X':case 'Z':c[i]='2';break;
  14.             case 'D':case 'T': c[i]='3';break;
  15.             case 'L':c[i]='4';break;
  16.             case 'M':case 'N': c[i]='5';break;
  17.             case 'R':c[i]='6';break;
  18.             default :c[i]='0';
  19.             }
  20.         }
  21.         for(i=0;c[i]!=0;i++)
  22.         {
  23.             if (c[i]==c[i+1])
  24.                 c[i]='0';
  25.         }
  26.         for(i=0;c[i]!=0;i++)
  27.         {
  28.             if (c[i]!='0')
  29.                 printf("%c",c[i]);
  30.         }
  31.         printf("\n");
  32.     }
  33.     return 1;
  34.     
  35. }


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