五一训练礼包 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;
} 

#学习路径#
全部评论

相关推荐

06-14 19:09
门头沟学院 Java
darius_:给制造业搞的,什么物料管理生产管理,设备管理点检,最最关键的就是一堆报表看板。个人觉得没啥技术含量都是些基本的crud,但是业务很繁琐那种
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务