算法与数据结构实验题 4.3 不知道取什么好

★实验任务 有一个长度为 n 的序列,第 i 个数的大小为 a[i]。现在从第 1 个数开始从左 往右进行以下操作: 1. 如果当前数是剩下的数中最大的,则输出并删去这个数。 2. 若不是,将它放到序列的末尾。 现在,bg 想知道一开始的第 m(从 1 开始计数)个数第几次被输出。
★数据输入
第一行输入两个正整数 n(0< n <=1000)、m(1=< m<=n)。 接下去一行有 n 个正整数,第 i 个数表示 a[i]的值。
★数据输出 输出一个数,表示第 m 个数第几次被输出。
输入示例
5 2
1 2 3 4 5
输出示例
4

输入示例
6 1
2 2 8 2 2 2
输入示例
5


简单的队列应用


/*
 * buzhidao.cpp
 *
 *  Created on: 2016年9月30日 
 *      Author: 221500423 CJDM66
 */
#include<iostream>
#include<queue>
#include<algorithm>
#define MAX 1001
using namespace std;
bool cmp(int a,int b){
    return a>b;
}
int main(void){
    queue<int*> que;
    queue<int> maxq;
    int a[MAX];
    int b[MAX];
    int i,n,m,count=0;
    cin>>n>>m;
    m--;
    for(i=0;i<n;i++){
        cin>>a[i];
        b[i]=a[i];
        que.push(&a[i]);
    }
    int *p=&a[m];
    sort(b,b+n,cmp);
    for(i=0;i<n;i++){
        maxq.push(b[i]);
    }
    while(1){
        if(*que.front() == maxq.front()){
            count++;
            maxq.pop();
            if(que.front() == p) break;
            que.pop();
        }
        else{
            que.push(que.front());
            que.pop();
        }
    }
    cout<<count;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/cjdm66/article/details/52713735
4.3