美文网首页
PAT习题刷题中

PAT习题刷题中

作者: nino天 | 来源:发表于2014-09-04 21:12 被阅读506次

    1001.3n+1猜想

    #include <stdio.h>
    
    int main()
    {
        int n,count=0;
        scanf("%d",&n);
    
        while(n)
        {
           if(n==1) break;
           count++;
           if(n%2)//奇数
               n = (3*n+1)/2;
           else
               n = n/2;
        }
        printf("%d",count);
        return 0;
    }
    

    2-05.求集合数据的均方差

    #include <stdio.h> 
    #include <math.h>
    #define MAX 10000
    int a[MAX];
    
    int main()
    {
        int n,i=0;
        long long int sum=0;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            sum += a[i];
        }
    
        double add=0.0,avg,temp=0.0,result;
        avg = 1.0*sum/n;
    
        for(int i=0;i<n;i++)
        {
           temp = a[i]-avg;
           temp = temp*temp;
           add += temp;
        }
    
        result = sqrt(add/n);
        printf("%.5lf",result);
       
        return 0;
    }
    

    1002.写出这个数

    #include <stdio.h>
    #include <string.h>
    char a[200]={0};
    char c[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    
    
    int main()
    {
      int i,sum=0,out[900];
      scanf("%s",a);
      for(i=0;i<strlen(a);i++)
            sum += a[i]-'0';
        i=0;
      while(sum)
      {
        out[i]=sum%10;
        sum=sum/10;
        i++;
      }
    
      for(i=i-1;i>0;i--)
        printf("%s ",c[out[i]]);
      printf(c[out[0]]);
      return 0;
    }
    

    1004.成绩排名

    #include <stdio.h>
    #include <string.h>
    #define MAX_NUM 100
    char name[MAX_NUM][12],number[MAX_NUM][12];
    
    int main()
    {
      int i=0,n,max=-1,min=101,score;
      int maxindex=0,minindex=0;
      scanf("%d",&n);
      while(n--)
      {
        scanf("%s%s%d",name[i],number[i],&score);
        //printf("%d",score);
        if(score>max) {maxindex = i;max=score;}
        if(score<min) {minindex = i;min=score;}
        i++;
      }
        printf("%s %s\n",name[maxindex],number[maxindex]);
        printf("%s %s",name[minindex],number[minindex]);
      return 0;
    }
    

    1005.继续3n+1猜想
    无力吐槽中,题目说了n不会超过100,所以对flag操作的时候没有考虑x的范围,因为不会数组越界,结果一直出现两个测试点的段错误..最后加了一句检验数组是否越界的if语句就通过了..

    #include <stdio.h>
    #include <stdlib.h>
    int flag[101]={0};
    int x,y[100];
    int compare(const void* _a, const void* _b)
    {
        int* a=(int*) _a;
        int* b=(int*) _b;
        return *b-*a;
    }
    
    
    int main()
    {
        int n,i=0;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&x);
            y[i]=x;
            if(flag[x]) continue;
            while(x)
            {
                if(x==1) break;
                if(x%2) x=(3*x+1)/2;
                else x=x/2;
                if(x<=100) flag[x]=1;//检查是否数组越界
            }   
        }
        flag[1]=0;
        int ta=0;
        qsort(y,n,sizeof(int),compare);
    
         for(i=0;i<n;i++)
         if(!flag[y[i]])
         {
             if(ta) printf(" ");
             else ta=1;
             printf("%d",y[i]);
         }
        return 0;
    }
    

    1006.换个格式输出
    要注意限定输入x<10000,否则段错误
    cnt1,cnt2,cnt3都要先初始化,否则段错误

    #include <stdio.h>
    #include <stdlib.h>
    
    char word1[10],word2[10],word3[10];
    int main()
    {
        int x,i,cnt1=0,cnt2=0,cnt3=0,count=0;
        scanf("%d",&x);
        if(x<1000)
        {
        while(x)
        {
            count++;
            switch(count)
            {
            case 1:
                cnt1=x%10;
                for(i=0;i<cnt1;i++)
                    word1[i]=i+1+'0';
                break;
            case 2:
                cnt2=x%10;
                for(i=0;i<cnt2;i++)
                    word2[i]='S';
                break;
            case 3:
                cnt3=x%10;
                for(i=0;i<cnt3;i++)
                    word3[i]='B';
                break;
            }
    
            x/=10;
        }
        }
    
        for(i=0;i<cnt3;i++)
            printf("%c",word3[i]);
        for(i=0;i<cnt2;i++)
            printf("%c",word2[i]);
        for(i=0;i<cnt1;i++)
            printf("%c",word1[i]);
        return 0;
    }
    

    1007.素数对猜想
    注意素数的函数返回值为int,开根操作需要特别注意。
    主循环里j<=x否则答案错误

    #include <stdio.h>
    #include <math.h>
    
    int is_prime(int x)
    {
        int i;
        int m;
        m=floor(sqrt(x)+0.5);
        for(i=2;i<=m;i++)
            if(x%i==0) return 0;
    
        return 1;
    }
    
    int main()
    {
        int x,i,j,cnt=0;
        scanf("%d",&x);
    
        if(x>0)
        {
            for(i=3,j=5;j<=x;i+=2,j+=2)
        {
            if(is_prime(i) && is_prime(j))
                cnt++;
        }
    
        printf("%d",cnt);
        }
        return 0;
    }
    

    1008.数组循环问题
    注意要对m求余,否则当m>n时就会出错

    #include <stdio.h>
    #include <math.h>
    int a[120],b[100];
    
    void shift_array(int a[],int n,int m)
    {
        int i,j;
        m = m%n;
        for(i=n-m,j=0;i<n;i++)
            b[j++]=a[i];
        for(i=n-m-1;i>=0;i--)
            a[i+m]=a[i];
        for(i=0,j=0;i<m;i++)
            a[i]=b[j++];
    }
    
    
    
    int main()
    {
        int N,M,flag=0;
        scanf("%d%d",&N,&M);
        
        int i;
        if(N>=1 && N<=100)
        {
            for(i=0;i<N;i++)
                scanf("%d",&a[i]);
        }
    
        if(M>=0)
            shift_array(a,N,M);
        
        for(i=0;i<N;i++)
        {
        if(!flag)
            {
              printf("%d",a[i]);
              flag=1;
            }
        else 
          printf(" %d",a[i]);
        }
    
        return 0;
    }
    

    1009.说反话

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int i,j=0,k;
        char word[100];
        char temp[80];
        gets(word);
        if(strlen(word)<=80)
        {
          for(i=strlen(word)-1;i>=0;i--)
          {
              if(word[i]==' ')
              {
                  for(k=j-1;k>=0;k--)
                    printf("%c",temp[k]);
                  printf(" ");
                  j=0;
                  continue;
              }
              temp[j++]=word[i];
              if(i==0)
              {
                  for(k=j-1;k>=0;k--)
                    printf("%c",temp[k]);
              }
          } 
        }
        return 0;
    }
    

    1010.一元多项式求导
    注意如果第一次输入就是个常数,需要输出0 0...

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        int n, e, flag = 0;
        while (scanf("%d%d", &n, &e) != EOF)
        {
            if( n*e )
            {
                if(flag)
                    printf(" ");
                else
                    flag = 1;
                printf("%d %d", n*e, e-1);
            }
        }
        if(!flag) printf("0 0");
        
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:PAT习题刷题中

          本文链接:https://www.haomeiwen.com/subject/stkytttx.html