对于这题笔者认为这符合队列的先进先出原则,所以可以通过队列数据结构来实现这个问题,
至于序号的话就可以通过建立结构体来达到要求;
而对于数据结构队列笔者在这稍微提示一下
像栈一样,队列(queue)也是一种线性表,它的特性是先进先出,插入在一端,删除在另一端。就像排队一样,刚来的人入队(push)要排在队尾(rear),每次出队(pop)的都是队首(front)的人。如图1,描述了一个队列模型。
下面就贴出笔者的代码:
#include<cstdio>
#include<queue>
#define N 100+10
#include<algorithm>
using namespace std;
struct child{
int need;
int number;
};
int main(void)
{
struct child Child[N],p,temp;
queue<child> q;
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
Child[i].number = i;
for(int i=1;i<=n;++i){
scanf("%d",&Child[i].need);
q.push(Child[i]);
}
if(q.size()==1) { printf("1\n"); return 0;}
while(q.size()!=1)
{
p = q.front();
if(p.need > m)
{
p.need -= m;
temp.need = p.need;
temp.number = p.number;
q.pop();
q.push(temp);
}
else
q.pop();
}
p = q.front();
printf("%d\n",p.number);
return 0;
}
更多关于队列的知识可以点击下面链接: