首页 > 五一训练礼包 I-9
头像
流莹遮月
发布于 2021-05-02 13:29
+ 关注

五一训练礼包 I-9

本题本质上就是寻找b数组中的值在a数组上的位置,且每找到一个就将a中找到的那个值移动到数组第一位。移动的操作为:用e储存要移动到首位的值,然后用循环将其前面的所有数向后移动一位,最后将e放在首位。
理解之后算法比较简单,用函数更加简洁。
#include<stdio.h>
int main()
{
  int n,q,i,j=0,l=0,e,h=0;
  scanf("%d%d",&n,&q);
  int a[300001],b[300001],c[300001];
  for(i=0;i<n;i++)
  {
  	scanf("%d",&a[i]);
  } 
  for(i=0;i<q;i++)
   {
   	scanf("%d",&b[i]);
   }
   while(1)
   {
   	if(h==q+1) break;
   	if(b[h]==a[j])
   	{
   		c[l]=j+1;l++;
   		e=a[j];
	    for(i=j-1;i>=0;i--)
	   {
		a[i+1]=a[i];
	   }
	   a[0]=e;
	   j=-1;h++;
	}
	j++;
   }
   for(i=0;i<q;i++)
   {
   	if(i==q-1)
   	{
   	printf("%d",c[i]);break;
	}
   	printf("%d ",c[i]);
   }
   return 0;
} 

全部评论

(0) 回帖
加载中...
话题 回帖

相关热帖

近期精华帖

热门推荐