【C++】基础强训

选择题:

1.已知二叉树后序遍历序列是bfegcda,中序遍历序列是badefcg,它的前序遍历序列是()

  •  A.abcdefg
  •  B.abdcefg
  •  C.adbcfeg
  •  D.abecdfg

如果直到中序和前序,后序中的一种,必须直到前序就能知道另一种排序顺序。

前序:根->左->右 , 中序:左->根->右, 前序:左->右->根

我们拿出来后续bfegcda,根据中序排列。所以根是a,左子树是b且就他一个。 d在a的右边,c在a右边,d的右边,g在a,d,c的右边;e在a,d右边,c,g的左边。如果e画在g的左边在,这样e就不再c的左边了。

所以答案:B

【C++】基础强训_第1张图片

2.对于顺序存储的线性表,访问结点和增加结点的时间复杂度为( c)

  • A O(n) O(n)
  • B O(n) O(1)
  • C O(1) O(n)
  • D O(1) O(1)

看到顺序存储就想到数组了,既然有数组就可以用下标访问,所以访问结点的时间复杂度是O(1),但是增加结点就要挪动数据,所以是O(n)。

3. 初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序 列为()

  • A 8 3 2 5 1 6 4 7
  • 3 2 8 5 1 4 6 7
  • C 3 8 2 5 1 6 7 4
  • D 8 2 3 5 1 4 7 6

 【C++】基础强训_第2张图片

小堆排序,所以要换位置。 

4.将数组(7-6-3-5-4-1-2)按照堆排序的方法在原地进行升堆排序, 则第一轮排序后的顺序是(C)

  • A . 2 6 3 5 4 1 7
  • B . 6 2 3 5 4 1 7
  • C .6 5 3 2 4 1 7
  • D .1 5 3 2 4 6 7

所以我们原地先建立一个堆。

【C++】基础强训_第3张图片

编程题:

1.洗牌:

【C++】基础强训_第4张图片

 【C++】基础强训_第5张图片

   这是大思路,洗一次牌的顺序是它,再洗一次,左手牌,右手牌的顺序仍旧根据排放规律再重新放到card中。

#include
#include
using namespace std;
int main()
{
    int T , n, k;
    cin>>T;
    while(T--)   //输入T组数据
    {
        cin>>n>>k;
        int num=n*2;   //手牌总数
        vector card(num);
        for(int i=0;i>card[i];    //把牌输入进去
        }
        // 开始洗牌
        while(k--)
        {
            vector tmp(card.begin(),card.end());  //临时牌的收养所
            for(int j=0;j

一定要注意最后一张牌的后面不带空格,所以我们给他开个专场。

2.MP3光标位置

【C++】基础强训_第6张图片

  •  解析:

这个题其实我们要设置一个变量first指向每一页的第一首歌的编号,来判断是否需要翻页。

再设置num表示光标所在歌的编号。

  • 1.n<=4(歌曲正好一页显示完,用不到first)
  1. num在第一首歌的位置,执行U命令,num变成最后一首歌就行了。
  2. num在最后一首歌的位置,执行D,num=1就可以了。
  3. 普通情况,U执行-运算,D+。
  • 2.歌数大于4首
  1. 第一页第一首歌,U操作,first到最后一页第一首,num到最后一页最后一首。
  2. 最后一页最后一首,first和num都到第一页第一首。
  3. 中间页的第一首歌进行U操作,first,num同时减一就可以【C++】基础强训_第7张图片
  4. 中间页的最后一首进行D操作,first,num同时加一就可以了。【C++】基础强训_第8张图片
  5. 普通情况,该加加,该减减。
#include
#include
using namespace std;

int main()
{
    int n;
    string cmd;
    while(cin>>n>>cmd)
    { 
        int first=1,num=1;
        //first表示每一页的第一首歌编号,num表示光标所在歌的编号
        //1.就4首歌不需要翻页
        if(n<=4)
        {
            for(int i=0;i

你可能感兴趣的:(C++,算法)