UVa OJ ShellSort 10152 龟壳排序

本文介绍了一个UVaOJ上的ShellSort问题(编号10152),通过移动序列将源串转换为目标串,并给出了逆序思考的解题思路及AC代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UVa OJ ShellSort 10152 龟壳排序

给定一个源串和目标串,求如何用最少的移动次数来将源串变成目标串,为了理解方便,这里把原来的字符串序列,简化为数字序列,每次移动的数字只能放到最前面,如:

源串:1,2,3,4,5;

目标串:3,2,1,4,5;

那么移动序列为过程为:

源串:1,2,3,4,5;

(1)2,1,3,4,5;

(2)3,2,1,4,5;

源串经过以上两步变为目标串,其移动的次数为2,移动的数字为:2,3。

根据题目要求,只需要输出移动的数字即可,即:2,3。

解题思路:

逆序来思考,从栈底往栈顶考虑,即将目标串与源串失匹配的最大位置的数字及其所有最前数字逆序输出。

拿以上的举例的源串和目标串来说,在目标串中其失匹配的最大位置为 i = 1,则逆序输出该位置的数字及其最前的所有数字:2,3。

AC代码如下,仅供参考。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXN 100

char orgStr[MAXN*3][MAXN];
char reqStr[MAXN*3][MAXN];

int main(){
	#ifdef LOCAL
	freopen("10152_input.txt","r",stdin);
	freopen("10152_output.txt","w",stdout);
	#endif
	int t,n;
	int i,j;
	int count;
	scanf("%d",&t);
	for(i=0;i<t;i++){
		scanf("%d",&n);
		getchar();
		count=n-1;
		for(j=0;j<n;j++)
			gets(orgStr[j]);
		for(j=0;j<n;j++)
			gets(reqStr[j]);
		for(j=n-1;j>=0;j--)
			if(!strcmp(orgStr[j],reqStr[count]))
				count--;
		for(j=count;j>=0;j--)
			printf("%s\n",reqStr[j]);
		printf("\n");
	}	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值