描述
有 n 个人正在排队结账,现在最后一个人有特殊情况,经协商后,大家允许他插队到第 x 个位置。请输出他插队后的排队情况。
然后,第 y 个人有特殊情况离开队伍,请输出他离开后的排队情况。
输入格式
第一行包含 1 个正整数 n(2≤n≤100) ,表示排队人数;
第二行包含 n 个正整数,之间用空格隔开,表示队伍编号;
第三行包含 1 个正整数 x(1≤x<n),表示将要插队到的位置;
第四行包含 1 个正整数 y(1≤y≤n),表示第 y 个人将要离开队伍。
输出格式
第一行 n 个正整数,之间用空格隔开,表示插队后的排队情况;
第二行 n−1 个正整数,用空格隔开,表示有人离队后的排队情况。
样例输入 1
7 7 2 3 4 5 6 1 3 4
样例输出 1
7 2 1 3 4 5 6 7 2 1 4 5 6
思路
任何把最后一个人插入进来?
可以把他临时存储,将其他人排好序后,最后把他插进去。
要不要把要离开的人进行删除呢?
其实不需要,太麻烦了,可以在输出时,分两次循环,跳过离开的人,就可以拉。
代码
#include<bits/stdc++.h>
using namespace std;
int a[105];//定义队伍数组,尽量开大一点,防止越界
int main()
{
//n是人数 x是插入位置 y是离开的人 b是临时存储变量
int n,i,x,y,b;//i是循环变量为了后续使用方便
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];//读取队列
cin>>x>>y;
b=a[n];//取出最后一项(也就是要插队的那个人)
for(i=n;i>=x+1;i--)//将他要插队的地方空出来
a[i]=a[i-1];//插队地方的人和后面的人都要往后挪一位
a[x]=b;//将他插进去
for(i=1;i<=n;i++)cout<<a[i]<<" ";//输出插完队后的队列
cout<<endl;
//因为有一个人要离开,我们可以直接跳过他输出
for(i=1;i<=y-1;i++)cout<<a[i]<<" ";
for(i=y+1;i<=n;i++)cout<<a[i]<<" ";
return 0;
}

5851

被折叠的 条评论
为什么被折叠?



