历年考研机试答案哈尔滨工业大学.docx

上传人:b****5 文档编号:5798047 上传时间:2023-01-01 格式:DOCX 页数:21 大小:19.57KB
下载 相关 举报
历年考研机试答案哈尔滨工业大学.docx_第1页
第1页 / 共21页
历年考研机试答案哈尔滨工业大学.docx_第2页
第2页 / 共21页
历年考研机试答案哈尔滨工业大学.docx_第3页
第3页 / 共21页
历年考研机试答案哈尔滨工业大学.docx_第4页
第4页 / 共21页
历年考研机试答案哈尔滨工业大学.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

历年考研机试答案哈尔滨工业大学.docx

《历年考研机试答案哈尔滨工业大学.docx》由会员分享,可在线阅读,更多相关《历年考研机试答案哈尔滨工业大学.docx(21页珍藏版)》请在冰豆网上搜索。

历年考研机试答案哈尔滨工业大学.docx

历年考研机试答案哈尔滨工业大学

哈工大计算机院研究生入学考试机试编程题(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

intmain()

{

    intx,y,z;

    floatn;

    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);

                }

            }

        }

    }

    return0;

}

题目描述:

输入10个数,要求输出其中的最大值。

输入:

测试数据有多组,每组10个数。

输出:

对于每组输入,请输出其最大值(有回车)。

样例输入:

10222315265798596321

样例输出:

max=152

参考答案:

#include

intmain()

{

    inti,a[10],maxn;

    while(scanf("%d",&a[0])!

=EOF)

    {

        maxn=a[0];

        for(i=1;i<10;i++)

        {

            scanf("%d",&a[i]);

            if(maxn

            {

                maxn=a[i];

            }

        }

        printf("max=%d\n",maxn);

 

    }

 

    return0;

}

题目描述:

给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。

输入:

测试数据有多组,每组输入一个数n。

输出:

对于每组输入,若是素数则输出yes,否则输入no。

样例输入:

13

样例输出:

yes

参考答案:

#include

#include

intjudge(intn)

{

inti;

if(n<=1)

return0;

else

{

for(i=2;i<=sqrt(n);i++)

{

if(n%i==0)

return0;

}

return1;

}

}

intmain()

{

intn;

while(scanf("%d",&n)!

=EOF)

{

if(judge(n))

printf("yes\n");

else

printf("no\n");

}

return0;

}

题目描述:

给定三角形的三条边,a,b,c。

判断该三角形类型。

输入:

测试数据有多组,每组输入三角形的三条边。

输出:

对于每组输入,输出直角三角形、锐角三角形、或是钝角三角形。

样例输入:

345

样例输出:

直角三角形

参考答案:

//判断直角、锐角、钝角三角形

#include

#include

voidexchange(int*a,int*b)

{

inttemp=*a;

*a=*b;

*b=temp;

}

intmain()

{

inta,b,c;

intx;

while(scanf("%d%d%d",&a,&b,&c)!

=EOF)

{

if(a

exchange(&a,&b);

if(a

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");

}

return0;

}

题目描述:

输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果。

输入:

测试数据有多组,每组输入字符串s和字符c。

输出:

对于每组输入,输出去除c字符后的结果。

样例输入:

heallo

a

样例输出:

hello

参考答案:

#include

#include

intmain()

{

chara[100],b;

inti,j,l;

while(scanf("%s%c",a,&b)!

=EOF)

{

j=0;

l=strlen(a);

for(i=0;i

{

if(a[i]!

=b)

{

a[j++]=a[i];

}

}

a[j]=a[l];

printf("%s\n",a);

}

return0;

}

哈工大计算机专业机试编程题(2010)

题目描述:

求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。

即完数是等于其所有因子相加和的数。

输入:

测试数据有多组,输入n,n数据范围不大。

输出:

对于每组输入,请输出1-n内所有的完数。

如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。

样例输入:

6

样例输出:

6

参考答案:

#include

intmain()

{

intn,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

{

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个

}

return0;

}

题目描述:

给定a和n,计算a+aa+aaa+a...a(n个a)的和。

输入:

测试数据有多组,输入a,n(1<=a<=9,1<=n<=100)。

输出:

对于每组输入,请输出结果。

样例输入:

110

样例输出:

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时的情况,例输入02输出应为0而不应是00;

-----------------------------------------------------------------------*/

#include

intmain()

{

inti,a,n,b[50],temp=0,counter;

while(scanf("%d%d",&a,&n)!

=EOF)

{

counter=0;

temp=0;

for(i=0;i

{

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");

}

return0;

}

题目描述:

输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。

输入:

测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。

输出:

对于每组输入,请输出结果。

样例输入:

2

13

0

样例输出:

-1

/*----------------------------------------------------------------------

1.顺序查找问题;

2.初始化下标为j=-1,顺序查找数组,若找到某个下标为i的数等于x,则j=i,

查找完毕输出j,若查找过程中j未改变,输出结果就为-1;

-----------------------------------------------------------------------*/

#include

intmain()

{

inti,n,b[200],j,x;

while(scanf("%d",&n)!

=EOF)

{

j=-1;

for(i=0;i

{

scanf("%d",&b[i]);

}

scanf("%d",&x);

for(i=0;i

{

if(x==b[i])

{

j=i;

}

}

printf("%d\n",j);

}

return0;

}

题目描述:

输入一个数n,然后输入n个数值各不相同,调换数组中最大和最小的两个数,然后输出。

输入:

测试数据有多组,输入n(1<=n<=20),接着输入n个数。

输出:

对于每组输入,输出交换后的结果。

样例输入:

2

13

样例输出:

31

参考答案:

/*----------------------------------------------------------------------

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

intmain()

{

inti,n,a[50],maxi,mini,temp;

while(scanf("%d",&n)!

=EOF)

{

maxi=mini=0;

scanf("%d",&a[0]);

for(i=1;i

{

scanf("%d",&a[i]);

if(a[i]>a[maxi])

{

maxi=i;

}

if(a[i]

{

mini=i;

}

}

temp=a[maxi];

a[maxi]=a[mini];

a[mini]=temp;

for(i=0;i

{

printf("%d",a[i]);

}

printf("%d\n",a[i]);

}

return0;

}

题目描述:

输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串。

输入:

测试数据有多组,输入字符串。

输出:

对于每组输入,输出处理后的结果。

样例输入:

bacd

样例输出:

abcd

参考答案:

/*----------------------------------------------------------------------

1.统计a~z个数,存入c[26]中;

2.根据c[i],打印c[i]个ASCII码为97+i的字符;

-----------------------------------------------------------------------*/

#include

#include

intmain()

{

inti,j,k,c[26]={0};

chara[202];

while(scanf("%s",a)!

=EOF)

{

j=strlen(a);

for(i=0;i

{

k=a[i];

c[k-97]++;

}

for(i=0;i<26;i++)

{

for(j=0;j

{

k=97+i;

printf("%c",k);

}

}

for(i=0;i<26;i++)

{

c[i]=0;

}

printf("\n");

}

return0;

}

哈尔滨工业大学复试编程试题(2011)

题目描述:

输入一个字符串,长度小于等于200,然后将数组逆置输出。

输入:

测试数据有多组,每组输入一个字符串。

输出:

对于每组输入,请输出逆置后的结果。

样例输入:

hdssg

样例输出:

Gssdh

参考答案:

#include

#include

intmain()

{

inti,j,l;

chara[200],b[200];

while(scanf("%s",a)!

=EOF)

{

l=strlen(a);

for(i=0,j=l-1;i

{

b[i]=a[j];

}

b[i]=0;

puts(b);

}

return0;

}

题目描述:

输入两个正整数,求其最大公约数。

输入:

测试数据有多组,每组输入两个正整数。

输出:

对于每组输入,请输出其最大公约数。

样例输入:

4914

样例输出:

7

参考答案:

#include

intmain()

{

unsignedinta,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);

}

return0;

}

题目描述:

输入20个数,每个数都在1-10之间,求1-10中的众数(众数就是出现次数最多的数,如果存在一样多次数的众数,则输出权值较小的那一个)。

输入:

测试数据有多组,每组输入20个1-10之间的数。

输出:

对于每组输入,请输出1-10中的众数。

样例输入:

51510353486836510710262

样例输出:

5

参考答案:

#include

intmain()

{

inta[20],b[11];

inti,c;

while(scanf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5]

&a[6],&a[7],&a[8],&a[9],&a[10],&a[11],&a[12],&a[13],&a[14],&a[15],&a[16],&a[17]

&a[18],&a[19])!

=EOF)

{

c=1;

for(i=1;i<11;i++)//数组b[i]记录i的出现次数,初始化为0,b[0]未用

b[i]=0;

for(i=0;i<20;i++)//统计各个数(1~10)的个数

{

b[a[i]]+=1;

}

for(i=1;i<11;i++)//求出现次数最多且最小的那个数

{

if(b[c]

c=i;

}

printf("%d\n",c);

}

return0;

}

哈尔滨工业大学复试编程试题(2012)

题目描述:

一个百万富翁遇到一个陌生人,陌生人找他谈了一个换钱的计划。

该计划如下:

我每天给你10万元,你第一天给我1分钱,第二天2分钱,

第三天4分钱……

这样交换30天后,百万富翁交出了多少钱?

陌生人交出了多少钱?

(注意一个是万元,一个是分)

输入:

该题没有输入

输出:

输出两个整数,分别代表百万富翁交出的钱和陌生人交出的钱,富翁交出的钱以万元作单位,陌生人交出的钱以分作单位。

参考答案:

#include

#include

voidmain()

{

intsum_a=0,per_day_1=10;//富人总共得到的money

longsum_b=0,per_day_2=1;

inti;

for(i=0;i<30;i++)

{

sum_a+=per_day_1;

sum_b+=per_day_2;

per_day_2*=2;

}

printf("%d%ld\n",sum_a,sum_b);

}

题目描述:

不用strcat函数,自己编写一个字符串链接函数MyStrcat(chardstStr[],charsrcStr[])

输入:

两个字符串,字符串由小写字母组成。

输出:

链接后的字符串

样例输入:

helloworld

goodmorning

样例输出:

helloworld

goodmorning

参考答案:

#include

#include

voidMyStrCat(chardstStr[],charsrcStr[])

{

inti,j;

for(i=0;dstStr[i]!

=0;i++);

for(j=0;srcStr[j]!

=0;j++)

{

dstStr[i++]=srcStr[j];

}

dstStr[i]=0;

}

intmain()

{

chara[25],b[25];

while(scanf("%s",a)!

=EOF&&scanf("%s",b)!

=EOF)

{

MyStrCat(a,b);

printf("%s\n",a);

}

return0;

}

题目描述:

计算两个矩阵的乘积,第一个是2*3,第二个是3*2

输入:

输入为两个矩阵,其中一个为2*3的矩阵,另一个为3*2的矩阵

输出:

一个2*2的矩阵(每一个数字后都跟一个空格)

样例输入:

123

345

67

89

1011

样例输出:

5258

100112

参考答案:

#include

intmain()

{

inta1,b1,c1;

intd1,e1,f1;

inta2,b2;

intc2,d2;

inte2,f2;

inta,b;

intc,d;

while(scanf("%d%d%d%d%d%d",&a1,&b1,&c1,&d1,&e1,&f1)!

=EOF&&

scanf("%d%d%d%d%d%d",&a2,&b2,&c2,&d2,&e2,&f2)!

=EOF)

{

a=a1*a2+b1*c2+c1*e2;

b=a1*b2+b1*d2+c1*f2;

c=d1*a2+e1*c2+f1*e2;

d=d1*b2+e1*d2+f1*f2;

printf("%d%d\n%d%d\n",a,b,c,d);

}

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1