【百度】试题若干

来源:互联网 发布:用友网络未来价值2017 编辑:程序博客网 时间:2024/06/06 07:42

1【排序】

给定数列(541,132,984,746,518,181,946,314,205,827)按照从小到大的顺序排列,采用冒泡排序时,第一趟扫描 结果是();采用直接选择大值开始排序时,第一趟扫描结果是();采用快速排序(以中间元素518为基准)的第一趟扫描结果是()。

(541,132,827,746,518,181,946,314,205,984)

(205,132,314,181,518,746,946,984,541,827)

(132,541,746,984,181,518,314,946,205,827)

解答:

给定数列(541,132,984,746,518,181,946,314,205,827)

选择:C A B:

冒泡排序(从小到大):通过比较相邻的两个元素,将大的移动到最后面,所以完成一趟比较的结果就是将最大的放在最后面。

直接选择排序(采用选择大值):就是讲最大的一个元素取出来和最后面的一个元素交换,别的元素位置不变。

快速排序(以518为基准):数组左边防止比基准小的元素,数组右边放置比基准大的元素。

2【查找】

求符合指定规则的数。 给定函数 d(n) = n + n 的各位之和,n 为正整数,如 d(78) = 78+7+8=93。 这样这个函数可以看成一个生成器,如 93 可以看成由 78 生成。
定义数 A:数 A 找不到一个数 B 可以由 d(B)=A,即 A 不能由其他数生成。现在要写程序,找出 1 至 10000 里的所有符合数 A 定义的数。输出:
1

解答:

#include<iostream>

 

using namespace std;

 

int main()

{

 

    int res[10036] = {0};//最大的加和为 9999+9+9+9+9 = 10035

    int temp = 0,n = 0;

 

    for (int i=1;i<10001;i++)

    {

        temp = i;

        n = i;

        while (n)

        {

            temp += n%10;

            n /= 10;

        }

 

        res[temp] = 1;//标记可以产生的数

    }

 

    for (int i=1;i<10001;i++)

    {

        if (0 == res[i])

        {

            cout<<i<<endl;

        }

    }

 

 

    return 0;

}

 

 


0 0
原创粉丝点击