湖南工业大学个人选拔赛第三场 解题报告

来源:互联网 发布:linux下的socket 编辑:程序博客网 时间:2024/04/29 23:44
hdu 2131View Code 复制代码#include<stdio.h>#include<string.h>int main(){    char ch[2],s[210];    while(scanf("%s %s",ch,s)!=EOF)    {          char x = ch[0];          int len = strlen(s);             int cnt = 0;          if( x >= 'A' && x <= 'Z' )             {              for(int i = 0; i < len; ++i )                  if( s[i] == x || s[i] == x+32 )                       cnt++;            }                    else          {              for(int i = 0; i < len; ++i )                  if( s[i] == x || s[i] == x-32 )                      cnt++;              }          printf("%.5f\n",1.0*cnt/len);    }        return 0;}

hdu 2132View Code复制代码#include<stdio.h>int main(){    int n;    __int64 f[100010]={0,1};    for(__int64 i = 2; i <= 100000; ++i )    {        if(i%3==0)           f[i] = f[i-1]+i*i*i;        else           f[i] = f[i-1]+i;            }        while(scanf("%d",&n), n >= 0 )    {        printf("%I64d\n",f[n]);                          }    return 0;}

hdu 2133View Code复制代码#include <iostream>using namespace std;int main(){    int d,m,y;    int month[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},                      {0,31,29,31,30,31,30,31,31,30,31,30,31}};    while(cin>>y>>m>>d)    {        int sum=d;        int leap=y%4==0&&y%100!=0||y%400==0;         for(int i=0;i<m;i++)          sum+=month[leap][i];        if(m==2)         {            if(leap==0&&d>28)           {             cout<<"illegal"<<endl;             continue;           }           if(leap&&d>29)           {             cout<<"illegal"<<endl;             continue;           }         }         if((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)         {             cout<<"illegal"<<endl;             continue;         }          if((m==4||m==6||m==9||m==11)&&d>30)          {              cout<<"illegal"<<endl;              continue;          }          if(m==0||d==0)          {              cout<<"illegal"<<endl;              continue;          }         for(int i=1;i<y;i++)         {            int leap=i%4==0&&i%100!=0||i%400==0;            sum+=((365+leap)%7);         }            int k=sum%7;            if(k==1) cout<<"Monday"<<endl;            else if(k==2) cout<<"Tuesday"<<endl;            else if(k==3) cout<<"Wednesday"<<endl;            else if(k==4) cout<<"Thursday"<<endl;            else if(k==5) cout<<"Friday"<<endl;            else if(k==6) cout<<"Saturday"<<endl;            else cout<<"Sunday"<<endl;    }}
hdu 2134View Code复制代码//R/r1=sqrt(1.5),r1/r2=sqrt(2)#include<stdio.h>#include<math.h>int main(){    int r;    while(scanf("%d",&r), r )    {          double r1 = 1.0*r/sqrt(3);          double r2 = r1*sqrt(2);          printf("%.3f %.3f\n",r1,r2);                          }         return 0;}

hdu 2135View Code复制代码#include<stdio.h>char a[11][11];void change(int n,bool flag){    char b[11][11];    if(flag)       {         for(int i = 1; i <= n; ++i )           for(int j = 1; j <= n; ++j )               b[j][n-i+1] = a[i][j];                  }    else    {       for(int i = 1; i <= n; ++i  )           for(int j = 1; j <= n; ++j )                b[n-j+1][i] = a[i][j];    }        for(int i = 1; i <= n; ++i )       for(int j = 1; j <= n; ++j )           a[i][j] = b[i][j]; }int main(){    int n, m;    while(scanf("%d%d",&n,&m)!=EOF)    {          getchar();          for(int i = 1; i <= n; ++i )                  scanf("%s",a[i]+1);          bool flag = true; // 正           m %= 4;          if( m < 0 ) flag = false, m = -m;          while(m--) change(n,flag);          //    puts("-->") ;          for(int i = 1; i <= n; ++i )           {              for(int j = 1; j <= n; ++j )                 printf("%c",a[i][j]);              putchar('\n');                 }                      }        return 0;}

hdu 2136View Code #include <stdio.h> #include <string.h>#define N 1000001int prime[N];int main (){    for ( int i = 0; i < N; i++ )          prime[i] = -1;    int num = 0;    for ( int i = 2; i < N; i++ )    {          if ( prime[i] == -1 )          {     num++;                for ( int j = i; j < N; j += i )                     prime[j] = num;              }    }     int n;    while ( scanf ( "%d", &n ) == 1  )    {          if ( n == 1 )                 printf ( "0\n");                else              printf ( "%d\n", prime[n] );    }    return 0;}

hdu 2137View Code复制代码题意:把一个字符串(奇数个字符)按中间字符为轴逆时针旋转n次后,输出。mark:2WA,n居然可以为负。。。# include <stdio.h># include <string.h>void out0(char str[], int len){puts (str) ;}void out1(char str[], int len){    int i, j ;    for (i = len-1 ; i >=0 ; i--)    {        for (j = 0 ; j < i ; j++) putchar (' ') ;        printf ("%c\n", str[i]) ;    }}void out2(char str[], int len){    int i, j ;    for(i=len-1;i>=0;i--)    {        for (j = 0 ; j < len/2 ; j++) putchar (' ') ;        printf ("%c\n", str[i]) ;    }}void out3(char str[], int len){    int i, j ;    for(i = len-1 ; i >= 0 ; i--)    {        for (j = 0 ; j < len-1-i ; j++) putchar (' ') ;        printf ("%c\n", str[i]) ;    }}void out4(char str[], int len){    int i ;    for (i = len-1 ; i >= 0 ; i--) putchar (str[i]) ;    putchar ('\n') ;}void out5(char str[], int len){    int i, j ;    for (i = 0 ; i < len ; i++)    {        for (j = 0 ; j < len-i-1 ; j++) putchar (' ') ;        printf ("%c\n", str[i]) ;    }}void out6(char str[], int len){    int i, j ;    for(i=0;i<len ;i++)    {        for (j = 0 ; j < len/2 ; j++) putchar (' ') ;        printf ("%c\n", str[i]) ;    }}void out7(char str[], int len){    int i, j ;    for(i = 0 ; i < len ; i++)    {        for(j = 0 ; j < i ; j++) putchar (' ') ;        printf("%c\n", str[i]) ;    }}int main (){    int k ;    char str[100] ;    while (~scanf ("%s %d%*c", str, &k))    {        if (k < 0) k = (-k)%8, k = 8-k ;        switch (k%8){        case 0: out0(str, strlen(str)) ; break ;        case 1: out1(str, strlen(str)) ; break ;        case 2: out2(str, strlen(str)) ; break ;        case 3: out3(str, strlen(str)) ; break ;        case 4: out4(str, strlen(str)) ; break ;        case 5: out5(str, strlen(str)) ; break ;        case 6: out6(str, strlen(str)) ; break ;        case 7: out7(str, strlen(str)) ; break ;        }    }    return 0 ;}

hdu 2138View Code复制代码#include<stdio.h>#include<math.h>#define N 10000000bool vis[N+10]={0};bool isp(int n ){     int t = (int)sqrt(n);     for( int i = 2; i <= t; ++i )         if(n%i==0) return false;     return true;}int main(){    for(int i = 2; i <= N; ++i )    {          if(!vis[i])           for(int j = i+i; j <= N; j += i )               vis[j] = true;                     }    int n,x;    while(scanf("%d",&n)!=EOF)    {          int num = 0;          for(int i = 1; i <= n; ++i )          {                scanf("%d",&x );               if( x <= N )               {                   if( !vis[x] )                      num++;               }               else if(isp(x))                     num++;          }          printf("%d\n",num);    }    return 0;}

hdu 2139View Code复制代码/*数学题。已知: 1^2+2^2+3^2+……+n^2 =n(n+1)(2n+1)/6                      —①那么  1^2+2^2+3^2+……+n^2+……+(2n+1)^2 =(2n+1)(n+1)(4n+3)/3 —②又有  2^2+4^2+6^2+……+(2n)^2 =4[1^2+2^2+3^2+……+n^2]=4*①   = 2n(n+1)(2n+1)/3 —③设所求为S 比较②和③可知 S=②-③=(2n+1)(n+1)(4n+3)/3-2n(n+1)(2n+1)/3=(2n+1)(n+1)(2n+3)/3 —④因为S是2n+1项的和 把它一般化 则奇数项平方和一般公式Sn=n(n+1)(n+2)/6*/#include<stdio.h>int main(){    __int64 n;    while(scanf("%I64d",&n) != EOF )    {          __int64 ans = n*(n+1)*(n+2)/6;           printf("%I64d\n",ans);           }        return 0;}