10152 - ShellSort

题目:10152 - ShellSort


题目大意:将给出的一个序列使用最少的操作将这个序列变成指定的序列。操作:每次只能把取出来的东西放到最顶上。


解题思路:只需要知道要移动那些东西,和移动的次序就可以了,并不需要真实的移动。看这个是否需要移动,就看这个的位置是否在指定的位置上,从底下开始判断,发现不是指定的位置说明要移动。就看它是在指定位置的哪,越下面就说明要越早移到顶上,所以用一个数组来存放,下标代表指定的位置。移动过后,判断的位置就要更新,因为原本的那个数已经被移动了,所以要判断原本那个数的上一个数。


#include<stdio.h>
#include<string.h>

const int N = 205;
const int M = 85;
int t, n;

char s1[N][M], s2[N][M], s[N][M];


int main() {

	int i, j, k;
	scanf("%d", &t);
	while(t--) {
		
		memset(s, 0, sizeof(s));
		memset(s1, 0 ,sizeof(s1));
		memset(s2, 0 ,sizeof(s2));
		scanf("%d%*c", &n);
		for(i = n - 1; i >= 0 ; i--) 
			gets(s1[i]);
		for(i = n - 1; i >= 0 ; i--) 
			gets(s2[i]);

		for(i = 0, k = 0; i < n; i++) {

			if(strcmp(s1[i], s2[k]) != 0) {

				for(j = k + 1 ;j < n; j++)
					if(strcmp(s1[i], s2[j]) == 0) {

						strcpy(s[j], s1[i]);
						break;
					}
			}
			else k++;
		}
		for(i = 0; i < n; i++)
			if(strcmp(s[i],"") != 0)
				printf("%s\n", s[i]);
			printf("\n");

	}
	return 0;
}


你可能感兴趣的:(10152 - ShellSort)