您的位置:首页 > 其它

2009浙大上机复试解题报告

2011-03-06 19:57 453 查看
更详细的解题报告请下载:http://download.csdn.net/source/3153210

包括2005-2011,有些题目有多种解法!

http://acm.hdu.edu.cn/showproblem.php?pid=3782

#include<stdio.h>
int ans;

void fun(int n)
{
if(n==1)return ;
else if(n%2==0)
{
n/=2;
ans++;
fun(n);
}
else
{
n=(3*n+1)/2;
ans++;
fun(n);
}
return ;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=0)
{
ans=0;
fun(n);
printf("%d/n",ans);
}
return 0;
}


http://acm.hdu.edu.cn/showproblem.php?pid=3783

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char str[200];
while(gets(str))
{
if(strcmp(str,"E")==0)break;
int z,o,j;
z=o=j=0;
int i;
int len=strlen(str);
for(i=0;i<len;i++)
if(str[i]=='Z')z++;
else if(str[i]=='O')o++;
else if(str[i]=='J')j++;
else break;
while(!(z==0&&o==0&&j==0))
{
if(z!=0)
{
printf("Z");
z--;
}

if(o!=0)
{
printf("O");
o--;
}
if(j!=0)
{
printf("J");
j--;
}
}
printf("/n");
}
return 0;
}


http://acm.hdu.edu.cn/showproblem.php?pid=3784

#include<iostream>
using namespace std;

int num[1005];
int d[1005];

void fun(int n)
{
if(n==1)return ;
else if(n%2==0)
{
n/=2;
if(n<=1000)d
=0;
fun(n);
}
else
{
n=(3*n+1)/2;
if(n<=1000)d
=0;
fun(n);
}
return ;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=0)
{
int i;
memset(d,0,sizeof(d));
for(i=1;i<=n;i++)
{
scanf("%d",&num[i]);
d[num[i]]=1;
}
for(i=1;i<=n;i++)
{
fun(num[i]);
}
int cnt=0;
for(i=n;i>=1;i--)
if(d[num[i]]==1)cnt++;
int k=0;
for(i=n;i>=1;i--)
{
if(d[num[i]]==1)
{
k++;
if(k==cnt)
printf("%d/n",num[i]);
else printf("%d ",num[i]);
}
}

}
return 0;
}


http://acm.hdu.edu.cn/showproblem.php?pid=3785

#include<stdio.h>
#include<stdlib.h>
int N,M;
int P[100005];
int cmp(const void *a,const void *b)
{
return (*(int *)b)-(*(int *)a);
}
int main()
{

while(scanf("%d %d",&N,&M)!=EOF)
{
if(N==0&&M==0)break;
int i;
for(i=1;i<=N;i++)
scanf("%d",&P[i]);
if(N<M)M=N;
qsort(P+1,N,sizeof(P[1]),cmp);
for(i=1;i<M;i++)
printf("%d ",P[i]);
printf("%d/n",P[M]);
}
return 0;
}


http://acm.hdu.edu.cn/showproblem.php?pid=3786

#include<iostream>
using namespace std;

char str[30][5];
char t[5];
int N,M;
int k;
int used[30];
int first;
int ok;
int ans;

int fun(char s,char T)
{
if(ok==1)return ans;
int i,j;
for(i=1;i<=N;i++)
{
if(ok==1)return ans;
if((first==0&&s==str[i][0])||(first==1&&used[i]==0&&str[i][0]==s))
{

if(k==0)first=1;
if(T==str[i][1]||T==str[i][2])
{
ok=1;
ans=k+1;
return ans;
}
for(j=1;j<=2;j++)
{
k++;
used[i]=1;
fun(str[i][j],T);
used[i]=0;
k--;
}

}
}
return 0;
}
int main()
{
while(scanf("%d %d",&N,&M)!=EOF)
{
if(N==0&&M==0)break;
int i;
for(i=1;i<=N;i++)
{
scanf("%s",str[i]);
}
for(i=1;i<=M;i++)
{
scanf("%s",t);

ok=first=k=0;
memset(used,0,sizeof(used));
ans=fun(t[0],t[1]);
if(ans==0)
{
ok=first=k=0;
memset(used,0,sizeof(used));
ans=fun(t[1],t[0]);
ans=-ans;
}
if(ans==0)printf("-/n");
else if(ans<0)
{
ans=-ans;
while(ans>2)
{
printf("great-");
ans--;
}
if(ans==2)printf("grandparent/n");
if(ans==1)printf("parent/n");
}
else
{
while(ans>2)
{
printf("great-");
ans--;
}
if(ans==2)printf("grandchild/n");
if(ans==1)printf("child/n");
}
}
}
return 0;
}


以上代码并不是最优,贴出来只为与广大研友交流!有需要提供个别题目具体思路的请留言!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: