1. 程式人生 > >hdu多題水題習題解(1)

hdu多題水題習題解(1)

hdu-1021-

#include<stdio.h>
int main()
{
   int n;
   while(~scanf("%d",&n))
   {
      if(n%4==2)
    puts("yes");
   else
    puts("no");
   }
     return 0;
}

 hdu-2503-

     a/b+c/d

 #include<stdio.h>
#include<string.h>
int gcb(int a,int b)
{
 return b?gcb(b,a%b):a;
}
int main()
{
  int n,a,b,c,d,k,t;
  scanf("%d",&n);
  while(n--)
  {
    scanf("%d%d%d%d",&a,&b,&c,&d);
     k=(a*d+b*c)/gcb(a*d+b*c,b*d);
  t=b*d/gcb(a*d+b*c,b*d);
  printf("%d %d\n",k,t);
  }
  return 0;
}

hdu-2504-

   又見GCD

#include<stdio.h>
#include<string.h>
int gcb(int a,int b)
{
 return b?gcb(b,a%b):a;
}
int main()
{
   int n,a,b,c;
   scanf("%d",&n);
   while(n--)
   {
    scanf("%d%d",&a,&b);
       for(c=1;c<a*b;c++)
    {
      if(gcb(c,a)==b&&c!=b) 
   {
    printf("%d\n",c);
             break;
   }
    }
   }
  return 0;
}

hdu-2047-

    阿牛的EOF牛肉串

#include<stdio.h>
int main()
{
   int i;
   __int64 n,num1,num3,num2;
   while(~scanf("%I64d",&n))
   {
     num1=3;
  num2=8;
  for(i=3;i<=n;i++)
  {
    num3=(num1+num2)*2;
    num1=num2;
    num2=num3;
  }
  if(n==1) num3=3;
  if(n==2) num3=8;
       printf("%I64d\n",num3);
   }
   return 0;
}

hdu-2070-

    Fibbonacci Number

#include<stdio.h>
int main()
{
   int n,i;
   __int64 f0,f1,f2=0;
   while(~scanf("%d",&n)&&n!=-1)
   {
    if(n==0)
     f2=0;
    else if(n==1)
     f2=1;
       else
    {
       f0=0;
    f1=1;
    for(i=2;i<=n;i++)
    {
      f2=f0+f1;
   f0=f1;
   f1=f2;
    }
    }
    printf("%I64d\n",f2);
   }
  return 0;
}

hdu-2104-

hide handkerchief

 #include<stdio.h>
#include<stdlib.h>
int gcb(int N,int M)
{
 return M ? gcb(M , N % M ) : N;
}
  int main()
  {
   int N,M;
    while(~scanf("%d%d",&N,&M),N!=-1&&M!=-1)
 {
   if(gcb(N,M)==1)
    puts("YES");
   else
    puts("POOR Haha");
 }
  return 0;
  }

 hdu-4548-

       美素數

#include<stdio.h>
#include<string.h>
int a[1000010];
int b[1000010];
int main()
{
    int i,j,h,l,k,num,n,m;
    int t=0;
    memset(a,0,sizeof(a));
    for(i=2;i*i<1000010;i++)
    {
      if(!a[i])
      {
        for(j=i*i;j<1000010;j+=i)
        {
          a[j]=1;
        }        
      }
    }          
         for(i=2;i<1000010;i++)
         {
           if(!a[i])
           {
              l=0;
              h=i;
              while(h)
              {
                l+=h%10;
                h/=10;       
              }
              if(!a[l])
                t++;                                                                            
           }
              b[i]=t;                                                                               
         }
                                                           
             
      scanf("%d",&num);
      for(k=1;k<=num;k++)
      {
        scanf("%d%d",&n,&m);
        printf("Case #%d: %d\n",k,b[m]-b[n-1]);                                                             
      }                     
   return 0;   
}
hdu-1005-

Number Sequence

#include<stdio.h>
int main()
{
  int i,n,a,b,k;
  int f[50];
  while(~scanf("%d%d%d",&a,&b,&n)&&a||b||n)
  {
    f[1]=1;
 f[2]=1;
 for(i=3;i<=49;i++)
 {
      f[i]=(a*f[i-1]+b*f[i-2])%7;
   if(f[i]==f[i-1]&&f[i]==1)
    break;
 }
  k=i-2;
  n=n%k;
  if(n==0)
   printf("%d\n",f[k]);
  else
   printf("%d\n",f[n]);
  }
  return 0;
}

hdu-1008-

Elevator

#include<stdio.h>
int main()
{
  int n,i,sum;
  int a[110];
  while(~scanf("%d",&n)&&n!=0)
  {
    for(i=0;i<n;i++)
   scanf("%d",&a[i]);
     sum=a[0]*6+n*5;
 for(i=1;i<n;i++)
 {
   if(a[i]>a[i-1])
    sum+=(a[i]-a[i-1])*6;
   if(a[i]<a[i-1])
      sum+=(a[i-1]-a[i])*4;
 }
  printf("%d\n",sum);
  }
  return 0;
}

hdu-1012

u Calculate e

#include<stdio.h>
int jiecheng(int n)
{
  int f;
  if(n==0||n==1)  f=1;
  else f=jiecheng(n-1)*n;
  return f;
}
int main()
{
   int jiecheng(int x);
   printf("n e\n- -----------\n0 1\n1 2\n2 2.5\n");
   double f;
   int i,n;
   f=2.5;
   for(i=3;i<=9;i++)
   {
     f=f+1.0/jiecheng(i);
     printf("%d %.9lf\n",i,f);
   }
   return 0;
}

hdu-1013-

Digital Roots

#include<stdio.h>
#include<string.h>
int digital(int n)
{
  int t=0;
  while(n)
  {
    t+=n%10;
 n/=10;
  }
   if(t-9>=1)
    t=digital(t);
   return t;
}
int main()
{
   int n,i,k;
   char s[10010];
   while(gets(s)&&s[0]!='0')
   {
     n=0;
  k=strlen(s);
  for(i=0;i<k;i++)
  {
    n+=s[i]-'0';
  }
         printf("%d\n",digital(n));
   }

   return 0;
}

 hdu-3783

ZOJ

#include<stdio.h>
#include<string.h>
int main()
{
   int i,j,k,a,b,c;
   char s[110];
   while(gets(s),s[0]!='E')
   {
     k=strlen(s);
  a=b=c=0;
  for(i=0;i<k;i++)
  {
    if(s[i]=='Z')
     a++;
    else if(s[i]=='O')
           b++;
    else if(s[i]=='J')
        c++;
  }
   for(i=0;i<k;i++)
   {
     if(a)
  {
    printf("Z");
    a--;
  }
      if(b)
    {
      printf("O");
   b--;
    }
   if(c)
    {
      printf("J");
   c--;
    }
   }
      puts("");
   }
   return 0;
}

hdu-1017

A Mathematical Curiosity

#include<stdio.h>
int main()
{
  int n,k,m,i,j,r;
  int T;
  scanf("%d",&T);
  for(r=0;r<T;r++)
  {
    k=1;
 while(~scanf("%d%d",&n,&m))
 {
  if(n+m==0)
          break;
    int t=0;
    for(i=1;i<n-1;i++)
      for(j=i+1;j<n;j++)
    if((i*i+j*j+m)%(i*j)==0)
     t++;
             printf("Case %d: %d\n",k++,t);
 }
  if(r!=T-1)
   printf("\n");
  }
       return 0;
}

hdu-2565

放大的X

#include<stdio.h>
int main()
{
    int n,i,j,k,t,r,m;
      scanf("%d",&n);
    for(r=0;r<n;r++)
  {
       scanf("%d",&m);
    k=m/2+1;
 for(i=k-1;i>=0;i--)
 {
 for(j=1;j<=m;j++)
   {
     if(j==k-i||j==k+i)
   printf("X");
  if(j>k-i&&j<k+i)
   printf(" ");
  if(j<k-i)
   printf(" ");
   }
         printf("\n");
 }
   for(i=1;i<k;i++)
 {
   for(j=1;j<=m;j++)
   {
     if(j==k-i||j==k+i)
   printf("X");
  if(j>k-i&&j<k+i)
   printf(" ");
  if(j<k-i)
   printf(" ");
   }
         printf("\n");
 }
            printf("\n"); 
  }
   return 0;
}

方法2:

使用的是陣列

#include<stdio.h>
#include<string.h>
int main()
{
    char ch[82][82];
    int i,j,n,T;
    memset(ch,0,sizeof(ch));
    scanf("%d",&T);
    while(T--)
      {
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
        for(j=1;j<=n;j++)
          {
              if(j==n+1-i||j==i)
               ch[i][j]='X';
               else
               ch[i][j]=' ';            
          }                
        }            
        for(i=1;i<=n/2;i++)
              {
        for(j=1;j<=n;j++)
        {
              if(i+j>n+1)
              break;
              printf("%c",ch[i][j]);                
        }
              printf("\n");           
              }
        for(;i<=n;i++)
          {
        for(j=1;j<=i;j++)
              printf("%c",ch[i][j]); 
              printf("\n");           
          }
              printf("\n");
      }
              return 0;   
}

hdu-1004

Let the Balloon Rise

#include<stdio.h>
#include<string.h>
char str[1010][15];
int main()
{
  int n,m,i,j,k;
  int a[1010];
  while(~scanf("%d",&n),n!=0)
  {
  int max=0;
  memset(a,0,sizeof(a));
    for(i=1;i<=n;i++)
  scanf("%s",str[i]);
 for(i=1;i<=n;i++)
 {
 for(j=i+1;j<=n;j++)
  if(strcmp(str[i],str[j])==0)
             a[i]++;
  if(a[i]>max)
  {
   max=a[i];
   k=i;
  }
 }
        printf("%s\n",str[k]);
  }
  return 0;
}

hdu-1161

Eddy's mistakes

#include<stdio.h>
#include<string.h>
int main()
{
  char str[1010];
  int k,i;
  while(gets(str))
  {
     k=strlen(str);
  for(i=0;i<k;i++)
  {
    if(str[i]>=65&&str[i]<=90)
     str[i]+=32; 
  }
   puts(str);
  }
  return 0;
}

hdu-2024

C語言合法識別符號

#include<stdio.h>
#include<string.h>
int main()
{
   int n,k,i;
   char str[60];
   scanf("%d",&n);
   getchar();
   while(n--)
   {
  int flag1=0,a=0;
     gets(str);
  k=strlen(str);
     for(i=0;i<k;i++)
  {
     if(str[0]>='a'&&str[0]<='z'||str[0]>='A'&&str[0]<='Z'||str[0]=='_')
        a=0;
  else
   flag1=1;
  if(str[i]>='0'&&str[i]<='9'||str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z'||str[i]=='_')
   a=0;
  else flag1=1;
  }
    if(flag1)
     printf("no\n");
    else
     printf("yes\n");
   }
   return 0;
}

hdu-2025

查詢最大元素

#include<stdio.h>
#include<string.h>
int main()
{
   int k,i,j;
   char str[110],ch;
   while(~scanf("%s",str))
   {
    ch='a';
 k=strlen(str);
     for(i=0;i<k;i++)
  {
   if(str[i]>=ch)
    ch=str[i];
  }
     for(i=0;i<k;i++)
  {
   printf("%c",str[i]);
    if(str[i]==ch)
     printf("(max)");
  }
  printf("\n");
   }
   return 0;
}

hdu-2026-

首字母變大寫

#include<stdio.h>
#include<string.h>
int main()
{
  int i,k;
  char s[120];
  while(gets(s))
  {
    k=strlen(s);
   s[0]-=32;
   for(i=1;i<k;i++)
   {
     if(s[i]>='a'&&s[i]<='z'&&s[i-1]==' ')
     s[i]-=32;
   }
    puts(s);
  }
  return 0;
}

hdu-2027

統計母音

#include<stdio.h>
#include<string.h>
int main()
{
  int n,r,num1,num2,num3,num4,num5,k,i;
  char str[120];
  scanf("%d\n",&n);
  for(r=0;r<n;r++)
  {   
   num1=num2=num3=num4=num5=0;
   gets(str);
      k=strlen(str);
 for(i=0;i<k;i++)
 {
   if(str[i]=='a')
    num1++;
   if(str[i]=='e')
    num2++;
   if(str[i]=='i')
    num3++;
   if(str[i]=='o')
    num4++;
   if(str[i]=='u')用getchar吸收換行符不行,我是這麼做的。
    num5++;
 }
 printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n",num1,num2,num3,num4,num5);
 if(r!=n-1)
  printf("\n");
  }
 
  return 0;
}

hdu-1060

Leftmost Digit

#include<stdio.h>
#include<math.h>
int main()
{
  __int64 N,num2;
  int n;
  double m;
  scanf("%d",&n);
  while(n--)
  {
   scanf("%I64d",&N);
    m=N*log10(N+0.0);
 m-=(__int64)m;
    num2=(__int64)pow(10,m);
 printf("%I64d\n",num2);
  }

  return 0;
}

此題如果我自己做的話估計需要一些時日。。。。。所知道的太少了