五一训练礼包—FindCard

I-FindCard

Content

  · 题目回溯

  · 题目分析

  · 可行代码

(一)题目回溯

  DISCRIPTION

 

   INPUT

 

   OUTPUT

 

  EXAMPILE

   NOTE

  

(二)题目分析

  1. 找出 ti 在数组中的位置,并记录

  2. 将 ti 前的所有数字往后移动一位

  3. 重复步骤1、2直到找完所有数字

(三)可行代码

#include <iostream>
using namespace std;
int main()
{
    int n, q;
    cin >> n >> q;
    int cards[n], queries[q], position[q];
    for (int i = 0; i < n; i++)
        cin >> cards[i];
    for (int i = 0; i < q; i++)
        cin >> queries[i];
    for (int i = 0; i < q; i++)
    {
        for (int j = 0; j < n; j++)
            if (cards[j] == queries[i])
            {
                position[i] = j;
                break;
            }
        int temp = cards[position[i]];
        for (int j = position[i]; j > 0; j--)
            cards[j] = cards[j - 1];
        cards[0] = temp;
    }
    for (int i = 0; i < q; i++)
    {
        cout << position[i] + 1;
        if (i < q - 1)
            cout << ' ';
    }
    return 0;
}
原文地址:https://www.cnblogs.com/kirk-notes/p/14729513.html