2010年哈尔滨工业大学计算机专业机试编程考研真题带答案

哈工大计算机专业机试编程题(2010)
题目描述:    
    求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。
输入:
    测试数据有多组,输入n,n数据范围不大。
输出:
    对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
样例输入:
6
样例输出:
6

参考答案:
#include<stdio.h>

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++)
            {
                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<stdio.h>

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++)
        {
            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
0
样例输出:
-1
/*----------------------------------------------------------------------
1.顺序查找问题;
2.初始化下标为j=-1,顺序查找数组,若找到某个下标为i的数等于x,则j=i,
  查找完毕输出j,若查找过程中j未改变,输出结果就为-1;
-----------------------------------------------------------------------*/

#include<stdio.h>
int main()
{
    int i, n, b[200], j, x;
    while(scanf("%d",&n)!=EOF)
    {
        j = -1;
        for(i=0;i<n;i++)
        {
            scanf("%d",&b[i]);
        }
        scanf("%d",&x);

        for(i=0;i<n;i++)
        {
            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<stdio.h>
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++)
        {
            scanf("%d",&a[i]);   if(a[i]>a[maxi])
            {
                maxi=i;
            }
            if(a[i]<a[mini])
            {
                mini=i;
            }
        }
        temp=a[maxi];
        a[maxi]=a[mini];
        a[mini]=temp;
        for(i=0;i<n-1;i++)
        {
            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<stdio.h>
#include<string.h>
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++)
        {
            k=a[i];
            c[k-97]++;
        }
        for(i=0;i<26;i++)
        {
            for(j=0;j<c[i];j++)
            {
                k=97+i;
                printf("%c",k);
            }
        }
        for(i=0;i<26;i++)
        {
            c[i]=0;
        }
        printf("\n");
    }
    return 0;
}

免责声明:本站所有的内容均来源于互联网采集或网友投稿提供,不能保证内容的真实性、完整性,仅供个人研究、交流学习使用,不涉及任何商业盈利目的。如果资料有误与官方发布不一致,请与官方最新发布为准,请联系本站管理员予以更改,如果涉及版权等问题,请联系本站管理员予以删除。
维权指引 | 权限说明 | 下载说明 | 内容投诉
考研云分享 » 2010年哈尔滨工业大学计算机专业机试编程考研真题带答案
您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论

加入会员,每天进步一点点
·会员权限 ·加网盘群 ·加微信群