您的位置:首页 > 其它

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

2013-04-16 16:26 465 查看
hdu 2131
View 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 2132
View 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
);
}
return 0;
}

hdu 2133
View 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 2134
View 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 2135
View 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 2136
View Code

#include <stdio.h>
#include <string.h>
#define N 1000001
int prime
;
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
);
}
return 0;
}

hdu 2137
View 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 2138
View Code
复制代码

#include<stdio.h>
#include<math.h>
#define N 10000000
bool 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 2139
View 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息