历年考研机试答案(哈尔滨工业大学)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
历年考研机试答案(哈尔滨工业大学)
哈工大计算机院研究生入学考试机试编程题(09-12)
哈工大计算机专业机试编程题(2009)
题目描述:
用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。
编程求解x,y,z所有可能解。
输入:
测试数据有多组,输入n。
输出:
对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。
样例输入:
40
样例输出:
x=0,y=0,z=100
x=0,y=1,z=99
x=0,y=2,z=98
x=1,y=0,z=99
参考答案:
#include
int main()
{
int x, y, z;
float n;
while(scanf("%f",&n)!=EOF)
{
for(x=0;5*x<=n;x++)
{
for(y=0;3*y<=n;y++)
{
z=100-x-y;
if((5*x+3*y+(float)z/3)<=n)
{
printf("x=%d,y=%d,z=%d\n",x,y,z); }
}
}
}
return 0;
}
题目描述:
输入10个数,要求输出其中的最大值。
输入:
测试数据有多组,每组10个数。
输出:
对于每组输入,请输出其最大值(有回车)。
样例输入:
10 22 23 152 65 79 85 96 32 1
样例输出:
max=152
参考答案:
#include
int main()
int i, a[10], maxn;
while(scanf("%d",&a[0])!=EOF)
{
maxn=a[0];
for(i=1;i<10;i++)
{
scanf("%d",&a[i]);
if(maxn<a[i])< p="">
{
maxn=a[i];
}
}
printf("max=%d\n",maxn);
}
return 0;
}
题目描述:
给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。
输入:
测试数据有多组,每组输入一个数n。
输出:
对于每组输入,若是素数则输出yes,否则输入no。
样例输入:
样例输出:
yes
参考答案:
#include
#include
int judge(int n)
{
int i;
if(n<=1)
return 0;
else
{
for(i=2;i<=sqrt(n);i++) {
if(n%i==0)
return 0;
}
return 1;
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF) {
if(judge(n))
printf("yes\n");
else
printf("no\n");
}
return 0;
}
题目描述:
给定三角形的三条边,a,b,c。
判断该三角形类型。
输入:
测试数据有多组,每组输入三角形的三条边。
输出:
对于每组输入,输出直角三角形、锐角三角形、或是钝角三角形。
样例输入:
3 4 5
样例输出:
直角三角形
参考答案:
//判断直角、锐角、钝角三角形
#include
#include
void exchange(int *a,int *b)
{
int temp=*a;
*a = *b;
*b = temp;
}
int main()
{
int a, b, c;
int x;
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
if(a<b)< p="">
exchange(&a,&b);
if(a<c)< p="">
exchange(&a,&c);
x = a*a - b*b -c*c;
if(x==0)
printf("直角三角形\n");
if(x<0)
printf("锐角三角形\n");
if(x>0)
printf("钝角三角形\n");
}
return 0;
}
题目描述:
输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果。
输入:
测试数据有多组,每组输入字符串s和字符c。
输出:
对于每组输入,输出去除c字符后的结果。
样例输入:heallo
a
样例输出:
hello
参考答案:
#include
#include
int main()
{
char a[100], b;
int i, j, l;
while(scanf("%s %c",a,&b)!=EOF)
{
j=0;
l = strlen(a);
for(i=0;i<l;i++)< p="">
{
if(a[i]!=b)
{
a[j++]=a[i];
}
}
a[j]=a[l];
printf("%s\n",a);
return 0;
}
哈工大计算机专业机试编程题(2010)
题目描述:
求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。
即完数是等于其所有因子相加和的数。
输入:
测试数据有多组,输入n,n数据范围不大。
输出:
对于每组输入,请输出1-n内所有的完数。
如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
样例输入:
6
样例输出:
6
参考答案:
#include
int main()
{
int n, i, j, k, a, b[20]={0}; //b[20]存放小于n的完全数
while(scanf("%d",&n)!=EOF) //输入一个n
k = 0; //b[k]表示第k+1个完全数,每次输入n后,k清零
for(i=2;i<=n;i++) //2~n,寻找完全数
{
a = 0; //a存放所有约数的和
for(j=1;j<i;j++)< p="">
{
if(i%j==0)
{
a+=j; //判断是否为约数
}
}
if(a==i) //判断约数和与原数是否相等
{
b[k++] = a;
}
}
for(i=0;i<(k-1);i++) //输出前k-1个完全数
{
printf("%d ",b[i]);
}
printf("%d\n",b[i]); //输出第k个
}
return 0;
}
题目描述:
给定a和n,计算a+aa+aaa+a...a(n个a)的和。
输入:
测试数据有多组,输入a,n(1<=a<=9,1<=n<=100)。
输出:
对于每组输入,请输出结果。
样例输入:
1 10
样例输出:
1234567900
参考答案:
/*----------------------------------------------------------------------
1.本题是一大数求和问题,无法用已知类型表示,故采用数组进行存储。
2.可用数组表示成为一个栈,结果取值从低位到高位依次入栈,然后依次出栈。
即s[0]表示为结果中的个位数,s[1]为十位数,依次类
推。
3.s[i]的值可由((n - i)*a + temp)%10获得,其中temp为后一位向前的进位,temp 可由 ((n - i)*a + temp)/10表示。
temp初始值为0.
4.注意结果如果为0时的情况,例输入0 2 输出应为0 而不应是00;
-----------------------------------------------------------------------*/
#include
int main()
{
int i, a, n, b[50], temp=0, counter;
while(scanf("%d%d",&a,&n)!=EOF)
{
counter = 0;
temp = 0;
for(i=0;i<n;i++)< p="">
{
b[i]=((n-i)*a + temp)%10;
temp=((n-i)*a + temp)/10;
}
b[i]=temp;
for(i=n;i>=0;i--)
{
if(b[i]==0)
{
counter++;
}
}
if(counter==(n+1)) //结果全零,不能输出n个零
printf("%d",b[0]);
else //如果不全零,只能是n位或n+1位 {
if(b[n]!=0)
printf("%d",b[n]);
for(i=n-1;i>=0;i--)
{
printf("%d",b[i]);
}
}
printf("\n");
}
return 0;
}
题目描述:
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
输入:
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
输出:
对于每组输入,请输出结果。
样例输入:
2
1 3
样例输出:
-1
/*----------------------------------------------------------------------
1.顺序查找问题;
2.初始化下标为j=-1,顺序查找数组,若找到某个下标为i的数等
于x,则j=i,
查找完毕输出j,若查找过程中j未改变,输出结果就为-1;-----------------------------------------------------------------------*/ #include
int main()
{
int i, n, b[200], j, x;
while(scanf("%d",&n)!=EOF)
{
j = -1;
for(i=0;i<n;i++)< p="">
{
scanf("%d",&b[i]);
}
scanf("%d",&x);
for(i=0;i<n;i++)< p="">
{
if(x==b[i])
{
j = i;
}
}
printf("%d\n",j);
}
return 0;
}
题目描述:
输入一个数n,然后输入n个数值各不相同,调换数组中最大和最小的两个数,然后输出。
输入:
测试数据有多组,输入n(1<=n<=20),接着输入n个数。
输出:
对于每组输入,输出交换后的结果。
样例输入:
2
1 3
样例输出:
3 1
参考答案:
/*----------------------------------------------------------------------
1.顺序查找问题;
2.初始化mini=maxi=1,maxn=minn=a[0],顺序查找数组,
若找到某个下标为i的数大于maxn,则maxi=i,maxn=a[i],若找到某个下标为i的数小于minn,则mini=i,minn=a[i],
查找完毕交换a[maxi],a[mini],顺序输出数组。
-----------------------------------------------------------------------*/
#include
int main()
{
int i ,n ,a[50] ,maxi ,mini, temp;
while(scanf("%d",&n)!=EOF)
{
maxi=mini=0;
scanf("%d",&a[0]);
for(i=1;i<n;i++)< p="">
{
scanf("%d",&a[i]);
if(a[i]>a[maxi])
{
maxi=i;
}
if(a[i]<a[mini])< p="">
{
mini=i;
}
}
temp=a[maxi];
a[maxi]=a[mini];
a[mini]=temp;
for(i=0;i<n-1;i++)< p="">
{
printf("%d ",a[i]);
}
printf("%d\n",a[i]);
}
return 0;
}
题目描述:
输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串。
输入:
测试数据有多组,输入字符串。
输出:
对于每组输入,输出处理后的结果。
样例输入:
bacd
样例输出:
abcd
参考答案:
/*----------------------------------------------------------------------
1.统计a~z个数,存入c[26]中;
2.根据c[i],打印c[i]个ASCII码为97+i的字符;
-----------------------------------------------------------------------*/ #include
#include
int main()
{
int i, j, k, c[26]={0};
char a[202];
while(scanf("%s",a)!=EOF)
{
j=strlen(a);
for(i=0;i<j;i++)< p="">
{
k=a[i];
c[k-97]++;
}
for(i=0;i<26;i++)
{
for(j=0;j<c[i];j++)< p="">
{
k=97+i;
printf("%c",k);
}
}
for(i=0;i<26;i++)
{
c[i]=0;
}
printf("\n");
}
return 0;
}
哈尔滨工业大学复试编程试题(2011)
题目描述:
输入一个字符串,长度小于等于200,然后将数组逆置输出。
输入:
测试数据有多组,每组输入一个字符串。
输出:
对于每组输入,请输出逆置后的结果。
样例输入:
hdssg
样例输出:
Gssdh
参考答案:
#include
#include
int main()
{
int i,j,l;
char a[200],b[200];
while(scanf("%s",a)!=EOF)
{
l = strlen(a);
for(i=0,j=l-1;i<l;i++,j--)< p="">
{
b[i]=a[j];
b[i]=0;
puts(b);
}
return 0;
}
题目描述:
输入两个正整数,求其最大公约数。
输入:
测试数据有多组,每组输入两个正整数。
输出:对于每组输入,请输出其最大公约数。
样例输入:
49 14
样例输出:
7
参考答案:
#include
int main()
{
unsigned int a,b;
while(scanf("%d%d",&a,&b)!=EOF) {
while(a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
printf("%d\n",a);
}
return 0;
</l;i++,j--)<> </c[i];j++)<> </j;i++)<> </n-1;i++)<> </a[mini])<> </n;i++)<> </n;i++)<> </n;i++)<> </n;i++)<> </i;j++)<> </l;i++)<> </c)<>
</b)<>
</a[i])<>。