杭电计算机历年复试真题.docx

上传人:b****6 文档编号:3651609 上传时间:2022-11-24 格式:DOCX 页数:29 大小:466.57KB
下载 相关 举报
杭电计算机历年复试真题.docx_第1页
第1页 / 共29页
杭电计算机历年复试真题.docx_第2页
第2页 / 共29页
杭电计算机历年复试真题.docx_第3页
第3页 / 共29页
杭电计算机历年复试真题.docx_第4页
第4页 / 共29页
杭电计算机历年复试真题.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

杭电计算机历年复试真题.docx

《杭电计算机历年复试真题.docx》由会员分享,可在线阅读,更多相关《杭电计算机历年复试真题.docx(29页珍藏版)》请在冰豆网上搜索。

杭电计算机历年复试真题.docx

杭电计算机历年复试真题

2006---2009年杭电计算机历年研究生复试---笔试编程

分类:

 C/C++ 数据结构2011-08-0715:

52 5483人阅读 评论(0) 收藏 举报

杭电计算机复试

1、输入一个十进制的数,把它转成八进制。

类似的把十进制转成16进制,把十六进制转变为十进制等。

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

   

2.#include   

3.  

4.int main(void)  

5.{  

6.    int num, a[100], i, j;  

7.    i = 0;  

8.    scanf("%d" , &num);  

9.    while(num !

= 0)  

10.    {  

11.        a[i++] = num % 8;  

12.        num /= 8;  

13.    }  

14.    if(i == 0)  

15.        printf("0\n");  

16.    else  

17.    {  

18.        for(j = i - 1; j >= 0; --j)  

19.            printf("%d", a[j]);  

20.        printf("\n");  

21.    }  

22.    return 0;  

23.}  

2、输入两个非常大的整数(完全超出了int、long的表示范围),这个整数的长度可能超过100位,计算并输出这两个数相加的结果。

(HDUacm1002用string处理比较好)

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

   

2.#include   

3.#include   

4.  

5.int main(void)  

6.{  

7.    int temp, i, j, k, len1, len2, m, sum[1010];  

8.    char a[1010], b[1010], c[1010];  

9.  

10.    scanf("%s %s", a, b);  

11.    len1 = strlen(a);  

12.    len2 = strlen(b);  

13.    if(len1 < len2)   //交换两个字符串,确保第一个字符串的长度不小于第二个字符串  

14.    {  

15.        strcpy(c, b);  

16.        strcpy(b, a);  

17.        strcpy(a, c);  

18.        m = len2, len2 = len1, len1 = m;  

19.    }  

20.    k = m = 0;  

21.    //从两个数的低位开始,手工模拟加法,逐位相加  

22.    for(i = len1 - 1, j = len2 - 1; i >= 0; --i, --j)  

23.    {  

24.        if(j >= 0)  

25.            temp = a[i] - '0' + b[j] - '0' + m;  

26.        else  

27.            temp = a[i] - '0' + m;  

28.        sum[k++] = temp % 10;  

29.        m = temp / 10;    //进位  

30.    }  

31.    if(m > 0)  

32.        printf("%d", m);  

33.    for(i = k - 1; i >= 0; --i)  

34.        printf("%d", sum[i]);  

35.    printf("\n");  

36.    return 0;  

37.}  

3、“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。

请写一个程序判断读入的字符串是否是“回文”。

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

   

2.#include   

3.#include   

4.  

5.int main(void)  

6.{  

7.    char str[100];  

8.    int len, i, j;  

9.  

10.    scanf("%s", &str);  

11.    len = strlen(str);  

12.    for(i = 0, j = len - 1; i < len && j >= i; ++i, --j)  

13.    {  

14.        if(str[i] !

= str[j])  

15.            break;  

16.    }  

17.    if(j < i)  

18.        printf("这个字符串是回文串!

\n");  

19.    else  

20.        printf("这个字符串不是回文串!

\n");  

21.    return 0;  

22.}  

4、输入n个数,按从小到大进行排序并输出。

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

   

2.#include   

3.#include   

4.using namespace std;  

5.  

6.int main(void)  

7.{  

8.      int n, i;  

9.  

10.      scanf("%d", &n);  

11.      int *p = new int[n];  

12.      for(i = 0; i < n; ++i)  

13.             scanf("%d", &p[i]);  

14.      sort(p, p + n);  

15.      for(i = 0; i < n; ++i)  

16.             printf("%d ", p[i]);  

17.      printf("\n");  

18.      return 0;  

19.}  

5、输入一个长整型的数,从低位起取出奇数位组成一个新的数输出。

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

   

2.#include   

3.  

4.int main(void)  

5.{  

6.    long n, k, i, j, newnum;  

7.    i = j = newnum = 0;  

8.  

9.    scanf("%ld", &n);  

10.    while(n)  

11.    {  

12.        k = n % 10;  

13.        for(j = 0; j < i; ++j)  

14.            k *= 10;  

15.        newnum += k;  

16.        n /= 100;  

17.        i++;     //每位数字上数字的权值  

18.    }  

19.    printf("%ld\n", newnum);  

20.    return 0;  

21.}  

6、输入n个字符串,将它们按字母由小到大的顺序排列并输出。

方法一:

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

   

2.#include   

3.#include   

4.#include   

5.using namespace std;  

6.  

7.bool cmp(const string& a, const string& b)  

8.{  

9.    return a < b;  

10.}  

11.  

12.int main(void)  

13.{  

14.    int i, n;  

15.    cin>>n;  

16.    string *p = new string[n];  

17.    for(i = 0; i < n; ++i)  

18.        cin>>p[i];  

19.    sort(p, p + n, cmp);  

20.    for(i = 0; i < n; ++i)  

21.        cout<

22.    delete []p;  

23.    return 0;  

24.}  

方法二:

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

   

2.#include   

3.#include   

4.using namespace std;  

5.  

6.int main(void)  

7.{  

8.    int n, i, j;  

9.    string temp;  

10.    cin>>n;  

11.    string *pt = new string[n];  

12.    for(i = 0; i < n; ++i)  

13.        cin>>pt[i];  

14.    for(i = 0; i < n - 1; ++i)  

15.    {  

16.        for(j = 0; j < n - i - 1; ++j)  

17.        {  

18.            if(pt[j] > pt[j + 1])  

19.            {  

20.                temp = pt[j];  

21.                pt[j] = pt[j + 1];  

22.                pt[j + 1] = temp;  

23.            }  

24.        }  

25.    }  

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

27.        cout<

28.    delete []pt;  

29.    return 0;  

30.}  

7、输入两个正整数,求出这两个数的最大公约数。

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

   

2.#include   

3.  

4.int gcd(int m, int n)  

5.{  

6.    int r;  

7.    while(r = m % n)  

8.    {  

9.        m = n, n = r;  

10.    }  

11.    return n;  

12.}  

13.  

14.int main(void)  

15.{  

16.    int m, n;  

17.    scanf("%d %d", &m, &n);  

18.    printf("最大公约数为:

%d\n", gcd(m, n));  

19.    return 0;  

20.}  

8、“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:

153=1^3+5^3+3^3,输入一个整数,判断它是否是水仙花数。

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

   

2.#include   

3.  

4.int main(void)  

5.{  

6.    int n, a, b, c;  

7.    scanf("%d", &n);  

8.    a = n % 10;  

9.    b = (n / 10) % 10;  

10.    c = n / 100;  

11.    if(n == a*a*a + b*b*b + c*c*c)  

12.        printf("这个数是水仙花数!

\n");  

13.    else  

14.        printf("这个数不是水仙花数!

\n");  

15.    return 0;  

16.}  

9、完数的定义:

如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:

6=1+2+3;28=1+2+4+7+14。

输入一个整数,判断它是否是完数。

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

   

2.#include   

3.  

4.int main(void)  

5.{  

6.    int i, m, n;  

7.    scanf("%d", &n);  

8.    for(i = 1, m = 0; i <= n/2; ++i)  

9.    {  

10.        if(n % i == 0)  

11.            m += i;  

12.    }  

13.    if(m == n)  

14.        printf("这个数是完数!

\n");  

15.    else  

16.        printf("这个数不是完数!

\n");  

17.    return 0;  

18.}  

2010年杭电计算机研究生复试---笔试编程

分类:

 C/C++ 数据结构2011-08-0718:

04 2666人阅读 评论(0) 收藏 举报

杭电计算机复试

   今天下午进行了计算机复试的笔试部分,总体感觉比去年的难了一些。

   第一题是猜数字的游戏,不太难的。

题目:

随即产生一个3位的正整数,让你进行猜数字,如果猜小了,输出:

“猜小了,请继续”。

如果猜大了,输出:

“猜大了,请继续”。

如果猜对了。

输出:

“恭喜你,猜对了”。

不过最多只能猜10次,如果猜了10次还没有猜对,就退出程序,输出:

“ByeBye”。

 还是比较简单的,就是三位随机数没有处理好。

   第二题是字符串求和。

编写函数FindAndSum,输入一个字符串,把字符串中的数字作为整数进行求和,并输出结果。

Sample:

输入:

Therearesomeapple.输出:

0。

输入:

124and1524输出:

1648。

这个题目是最简单的,只要读入的时候记得使用gets函数就可以了,scanf函数遇到空格的时候输入就结束了。

   第三题是文件操作和结构体对象数组的处理问题,处理一个文件student.txt,文件当中包括一组学生的信息,包括名字、学号、英语成绩、语文成绩、数学成绩、科学成绩,如下:

   姓名   学号   英语 语文 数学 科学

   张三 20100601 78  89  62  75

   李四 20100602 78  54  98  86

   王五 20100603 78  69  85  75

   ……………………………………

   从这个文件当中读入学生的信息,然后按照总成绩从高到低进行排序并输出学生信息。

由于长时间没有做过有关文件操作的题目,感觉很多都记不起来了,仅仅凭着一点记忆把代码写出来了,后面的结构体数组的排序处理就比较简单了。

   总而言之,感觉还是有一定的难度的,哎,不管了,考过就结束了,还是好好准备明天的专业课复试吧。

哈哈~~~

第一题:

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

  

2.#include   

3.#include   

4.#include   

5.  

6./** 

7.总结二:

生成n位随机数的方法 

8.         rand() % N + A, A为起始位,N为数字的总数。

 

9.         例如:

 生成 0~10的数字:

rand() % 11 + 0,即rand() % 11; 

10.                 生成 1~10的数字:

rand() % 10 + 1, 

11.                 生成 100~999的数字:

rand() % 900 + 100 

12.**/  

13.int main(void)  

14.{  

15.    int num, count, guess;  

16.    srand((unsigned)time(NULL));  //利用系统时间作为种子初始化随机数生成器  

17.    num = rand() % 900 + 100;     //生成一个3位数的随机数  

18.    count = 0;  

19.  

20.    while(count < 10)  

21.    {  

22.        scanf("%d", &guess);  

23.        if(guess == num)  

24.        {  

25.            printf("恭喜你,猜对了\n");  

26.            break;  

27.        }  

28.        else if(guess < num)  

29.        {  

30.            printf("猜小了,请继续\n");  

31.        }  

32.        else if(guess > num)  

33.        {  

34.            printf("猜大了,请继续\n");  

35.        }  

36.        ++count;  

37.    }  

38.    if(10 == count)  

39.    {  

40.        printf("Bye Bye\n");  

41.    }  

42.    return 0;  

43.}  

第二题:

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

  

2.#include   

3.#include   

4.  

5.int FindAndSum(char *str)      // 求和函数  

6.{  

7.    int sum, len, i, curr;  

8.    len = strlen(str);  

9.  

10.    curr = sum = 0;  

11.    for(i = 0; i < len; ++i)  

12.    {  

13.        if(str[i] >= '0' && str[i] <= '9')  

14.        {  

15.            curr = curr * 10 + str[i] - '0';  //求权相加,得到一个整数  

16.        }  

17.        else  

18.        {  

19.            //当遇到不是数字的字符时,则一个整数完成,将得到的整数加到结果中  

20.            if(i - 1 >= 0 && str[i - 1] >= '0' && str[i - 1] <= '9')  

21.            {  

22.                sum += curr;  

23.                curr = 0;  

24.            }  

25.        }  

26.    }  

27.    return sum;  

28.}  

29.int main(void)  

30.{  

31.    char str[10000];  

32.    gets(str);  

33.    printf("%d\n", FindAndSum(str));  

34.    return 0;  

35.}  

第三题:

[cpp] viewplaincopy

1.转载请标明出处,原文地址:

  

2.#include   

3.#include   

4.#in

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

当前位置:首页 > 高中教育 > 语文

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

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