hdu多题水题习题解(2)


hdu-1408

盐水的故事

#include<stdio.h>
//using namespace std;
int main()
{
    double a,b,k;
    int t,i,h,l;
    int time;
    while(~scanf("%lf%lf",&a,&b))
     {
        k=a/b;
        if(k-(int)k<0.000001)
        k=(int)k;
        else                    //这道题目应该考虑精度,不然的话会出错
        k=(int)k+1;          //我一直找不到错误在哪,改了精度之后我才发现
        for(i=1;;i++)
        {
            l=i*(i+1)/2;
           if(l>=k)
          {
            h=i;
            break;
          }   
        }  
        time=k+h-1;           
            printf("%d\n",time);              
     }   
return 0;   
}

 

How many days?

hdu-1555

#include<stdio.h>
int main()
{
    int n,m,k;
    while(~scanf("%d%d",&n,&m),n!=0&&m!=0)
    {
       k=0;
       while(n-m>=0)
       {
         k+=m;
         n=n-m+1;
       }     
        k+=n;
       printf("%d\n",k);                               
    }
return 0;   
}

hdu-1562

Guess the number

#include<stdio.h>
int main()
{
    int n,i,j,a,b,c;
    scanf("%d",&n);
    while(n--)
    {
      int flag=0;
      scanf("%d%d%d",&a,&b,&c);
      for(i=1000;i<=9999;i++)
      {
        if(i%a==0&&(i+1)%b==0&&(i+2)%c==0)
        {
           flag=1;
           break;                                 
        }                      
      }         
      if(flag==1)
      printf("%d\n",i);
      else
      printf("Impossible\n");
    }
return 0;   
}

 

hdu-1563

Find your present!

#include<stdio.h>
int main()
{
    int n,i,j;
    int a[220],b[220];
    while(~scanf("%d",&n),n!=0)
    { int max;
      for(i=0;i<n;i++)
      scanf("%d",&a[i]);
      max=a[0];
      for(i=1;i<n;i++)
           if(a[i]>max)
            max=a[i];
          printf("%d\n",max);
    }
return 0;   
}

七夕节

hdu-1215

#include<stdio.h>
#define MAX 510000
int main()
{
    int shu[MAX+100];
    int sum,i,j,k,n,m;
    k=(MAX+100)/2;
    for(i=1;i<k;i++)
      {
        for(j=i+i;j<MAX+100;j+=i)           数组开大点什么都有了。。。
            shu[j]+=i; 
      }                    
    scanf("%d",&n);
    while(n--)
    {
       scanf("%d",&m);
       printf("%d\n",shu[m]);              
    }
return 0;   
}

hdu-1249

三角形

#include<stdio.h>
int main()
{
    int n,i,j,m,k,t;
    scanf("%d",&n);
    while(n--)
    {
      scanf("%d",&m);         
      printf("%d\n",3*m*(m-1)+2);
    } 
return 0;   
}                             知道公式就好办了。。。。。

这类题的解法可以参照      http://hi.baidu.com/matrixwhisper/item/6bfe48522351e0d19e266717

Reverse Number

hdu-1266

#include<stdio.h>
#include<string.h>
int main()
{
    int n,m,i,j,k;
    char str[200];
    char ch;
    scanf("%d",&n);
    getchar();
    while(n--)
    {
      int h=0;
      gets(str);
      k=strlen(str);
      for(i=k-1;str[i]=='0';i--)
       {
         h++;                      
       }
       if(str[0]=='-')
       {
         for(i=1;i<(k-h+1)/2;i++)
         {
           ch=str[i];
           str[i]=str[k-h-i];
           str[k-h-i]=ch;
         }
         for(i=0;i<k;i++)
         printf("%c",str[i]);
         printf("\n");              
       }
       else
       {
         for(i=0;i<(k-h)/2;i++)
         {
            ch=str[i];
            str[i]=str[k-h-1-i];
            str[k-h-i-1]=ch;       
         }   
         for(i=0;i<k;i++)
         printf("%c",str[i]);
         printf("\n");
       }
      // for(i=0;i<h;i++)
      // printf("0");
    //   printf("\n");
    }
    //while(1);
return 0;   
}                          把这道题给做出来真心不容易。。。。。。。。
                         

 hdu-2147

#include<stdio.h>
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m),n!=0&&m!=0)
    {
      if(n%2==0||m%2==0)
      printf("Wonderful!\n");
      else
      printf("What a pity!\n");                                                
    }
return 0;   
}
这道题难了我几个小时。。。。。。

 hdu-1279

验证角谷猜想

#include<stdio.h>
#include<string.h>
int main()
{
   int n,m,i,j,k,t;
   int a[1000];
   while(~scanf("%d",&n))
    {
      while(n--)
      {
        t=0;
        memset(a,0,sizeof(a));
        int flag=0;
        scanf("%d",&m);
        while(m!=1)
        {         
          if(m&1)
           {
             a[t]=m;
             m=m*3+1;
             t++;
             flag=1;
           }
          else
             m/=2;
       }      
         if(flag==0)
         printf("No number can be output !\n");
         else
        {
          printf("%d",a[0]);
          for(i=1;i<t;i++)
          {
            printf(" %d",a[i]);
          } 
          printf("\n"); 
        }         
      }                    
    }
 return 0;                       一个小时。。。。。。。我去。。。   
}

 hdu-1290

献给杭电五十周年校庆的礼物

#include<stdio.h>
int main()
{
  int n,sum;
  while(~scanf("%d",&n))
  {
    sum=(n*n*n+5*n+6)/6;
    printf("%d\n",sum);
  }
return 0;   
}

hdu-2710

Max Factor

 #include<stdio.h>
#include<string.h>
#define maxn 40400
int sushu[maxn];
int main()
{
    int i,j;
    memset(sushu,0,sizeof(sushu));
    //sushu[0]=1;
    for(i=2;i*i<maxn;i++)
    {
      if(!sushu[i])
      {
        for(j=i*i;j<maxn;j+=i)
        sushu[j]=1;            
      }                    
    }
    int n,r,m,num,zuida;
    while(~scanf("%d",&n))
    {
       num=0;
       zuida=0;
       for(i=0;i<n;i++)
      {
        scanf("%d",&m);
        for(r=1;r<=m;r++)
       {
          if(m%r==0)
          if(!sushu[r])
         {
             if(r>num)
            {
              num=r;
              zuida=m;                                 1在这里是素数,不仅要考虑到1,就算输入的那个数是素数也得算上,我提交了好多次
        //      flag=1;
            }
         }               
       }    
      // if(flag==0)
      
      }
    printf("%d\n",zuida);
    }
   // while(1);
return 0;   
}                              

hdu-2700

Parity

#include<stdio.h>
#include<string.h>
int main()
{
    int n,m,i,j,k,t;
    char str[1000];
   // getchar();
    while(~scanf("%s",str),str[0]!='#')
    {
      t=0;
      k=strlen(str);                                  
      for(i=0;i<k-1;i++)
       if(str[i]=='1')
       t++;
       if(str[k-1]=='e'&&t%2==0)
       str[k-1]='0';
       if(str[k-1]=='e'&&t%2!=0)
       str[k-1]='1';
       if(str[k-1]=='o'&&t%2!=0)
       str[k-1]='0';
       if(str[k-1]=='o'&&t%2==0)
       str[k-1]='1';
       printf("%s\n",str);
    }
return 0;   
}

hdu-2568

前进

 

#include<stdio.h>
int main()
{
    int n,m,k;
    scanf("%d",&n);
    while(n--)
    {
      k=0;
      scanf("%d",&m);
      while(m)
      {
        if(m&1)
        {
         k++;
         m-=1;
      }
        else
        m>>=1;
      }  
      printf("%d\n",k);
    }
return 0;   
}                                  此题无意义,一次过。。。。。。。。。。。。

hdu-2567

寻梦

 

#include<stdio.h>
#include<string.h>
int main()
{
    int n,i,j,k,t;
    char a[100],b[100];                      又是水题
    scanf("%d",&n);
    while(n--)
    {
      getchar();
      scanf("%s %s",a,b);
      k=strlen(a);
      for(i=0;i<k/2;i++)
      printf("%c",a[i]);
      printf("%s",b);
      for(i=k/2;i<k;i++)
      printf("%c",a[i]);
      printf("\n");        
    }
return 0;   
}

hdu-2566

统计硬币

百钱百鸡问题。。。。

http://blog.sina.com.cn/s/blog_5c997a630100bsah.html

#include<stdio.h>
int main()
{
    int T,x,y,z,n,m;
    scanf("%d",&T);
    while(T--)
    {
      int  sum=0;
      scanf("%d %d",&n,&m);         
      for(x=0;x<=n;x++)
      {
        for(y=0;y<=n-x;y++)
        if(x+2*y+5*(n-x-y)==m)
         sum++;       
      }
      printf("%d\n",sum);
    }//while(1);
return 0;   
}理解了题意就比较好做了

 

hdu-2564

词组缩写

#include<stdio.h>
#include<string.h>
int main()
{
    int i,j,k,t,n;
    char str[30000],zifu[300];
    while(scanf("%d",&n)!=EOF)
  {
    getchar();
    for(int r=0;r<n;r++)
    {
      memset(str,'\0',sizeof(str));
      memset(zifu,'\0',sizeof(zifu));
      gets(str);
      k=strlen(str);
    //  printf("%d",k);
      for(i=0;i<k;i++)
      if(str[i]!=' ')
              break;
      zifu[0]=str[i];
 //     printf("%c",zifu[0]);       
      j=i;
      for(i=j+1,t=1;i<k;i++)
      {      
      if(str[i]!=' '&&str[i-1]==' ')
      {
        zifu[t]=str[i];
   //     printf("%c\n",zifu[t]);
        t++;
      }       
      }
   //   for(i=0;i<t;i++)
   //   printf("%c",zifu[i]);
   //   printf("\n");
      int num=t;
      for(i=0;i<num;i++)
      {
        if(zifu[i]>='A'&&zifu[i]<='Z')
        continue;
        else if(zifu[i]>='a'&&zifu[i]<='z')
        zifu[i]-=32;                 
     }
      printf("%s\n",zifu);
    }                                                          做出来真心不容易,是多组测试数据,题目上没加
      }//while(1);
return 0;   
}

hdu-2034

人见人爱A+B

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
    int n,m;
    int a[200];
    int b[200];
    int c[200];
    while(~scanf("%d%d",&n,&m))
    {
      int count=0;
      if(n==0&&m==0)             把这一个条件写到while里边也有错,我很无语,还有,为什么我刚开始的代码输出的都是一大串数字,这是怎么回事。。。。。。。
      return 0;
      int flag=0;
      for(int i=0;i<n;i++)
      scanf("%d",&a[i]);
      for(int j=0;j<m;j++)
      scanf("%d",&b[j]);
      for(int i=0;i<n;i++)
      {
        flag=1;       
        for(int j=0;j<m;j++)
        {
          if(a[i]==b[j])
          {
            flag=0;
            break;             
          }       
        }
        if(flag!=0)
        {
          c[count]=a[i];
          count++;          
        }
      }          
      sort(c,c+count);
      if(count==0)
      printf("NULL");
      for(int i=0;i<count;i++)
      {
       printf("%d ",c[i]);
      }
      printf("\n");                          
    }
return 0;   
}
 /*#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n,m;
    int a[100];
    int b[100];
    int c[100];
    while(cin>>n>>m)
    {
      int count=0;               
      if(n==0&&m==0)
      {
        return 0;                
      } 
      int flag=0;
      for(int i=0;i<n;i++)
      cin>>a[i];
      for(int j=0;j<m;j++)
      cin>>b[j];
      for(int i=0;i<n;i++)
      {
        flag=1;       
        for(int j=0;j<m;j++)
        {
          if(a[i]==b[j])
          {
            flag=0;
            break;             
          }       
        }
        if(flag!=0)
        {
          c[count]=a[i];
          count++;          
        }
      }
      sort(c,c+count);
      if(count==0)
      cout<<"NULL";
      for(int i=0;i<count;i++)
      {
        cout<<c[i]<<" ";       
      }
      cout<<endl;
    }
return 0;   
}*/

 

hdu-1276

士兵队列训练问题

#include<stdio.h>

int main()
{
    int bing[6000];
    int n,m,i,j,k,t;
    int sum;
    scanf("%d",&n);
    while(n--)
    {
      scanf("%d",&m);
      for(i=1;i<=m;i++)
        bing[i]=i;
      sum=m;
      if(sum<=3)
      {
        printf("1");
        for(i=2;i<=m;i++)
        printf(" %d",bing[i]);
        printf("\n");
        continue;         
      }
      while(1)
      {
        int flag=0;       
        for(i=1;i<=m;i++)
        {
                        
          if(bing[i])
           flag++;
           if(flag==2)
           {
             bing[i]=0;
             sum--;
             flag=0;          
           }                
        }
  //      printf("%d\n",sum);
        if(sum<=3)
        break;
        flag=0;
        for(i=1;i<=m;i++)
        {
          if(bing[i])
          flag++;
          if(flag==3)
          {
            bing[i]=0;
            sum--;
            flag=0;          
          }         
        }
        if(sum<=3)
        break;
      }
      sum--;
      printf("1");
      for(i=2;sum;i++)
      {
        if(!bing[i])  continue;
        printf(" %d",bing[i]);
        sum--;               
      }
      printf("\n");
    }                       简单方法过得。。。
return 0;   
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值