8-3 循环后移

//循环后移
#include <stdio.h>
#include <stdlib.h>
void shift(int *sequence, int number, int movement);
int main(void)
{
	int n;			// 整数个数 
	int m;			// 向后移 m个位置 
	int i;
	int *seq;		
	
	printf("请输入整数个数n:");
	scanf("%d",&n);
	while(n<=0)
	{
		printf("请重新输入整数个数 (n>0):");
		scanf("%d", &n);
	}
	if((seq = (int *)calloc(n, sizeof(int))) == NULL)
	{
		printf("Not able to allocate memory for seq. \n");
		exit(1);
	}
	
	printf("请输入%d个整数: ", n);
	for (i=0; i<n; i++)
	{
		scanf("%d", seq+i);
	}
	
	printf("你输入的序列为: ");
	for (i=0; i<n; i++)
	{
		printf("%d ", seq[i]);
	}
	printf("\n");
	
	printf("请输入后移位置数:");
	scanf("%d",&m);
	while(m<0)
	{
		printf("请重新输入后移位置数 (m>=0):");
		scanf("%d", &m);
	}
	
	shift(seq, n, m);
	printf("循环后移%d个位置后,序列为: ", m);
	for(i=0; i<n; i++)
	{
		printf("%d ", seq[i]);
	}
	printf("\n");
	
	free(seq);
	
	return 0;
}

void shift(int *sequence, int number, int movement)
{
	int i;
	int temp[100];
	movement = movement%number;
	if(movement == 0)
		;
	else
	{
//		if((temp = (* int)calloc(movement, sizeof(int))) == NULL)
//		{
//			printf("Not able to allocate memory for temp. \n");
//			exit(1);
//		}
		for(i=0; i<movement; i++)
		{
			temp[i] = sequence[number-movement+i];
		}
		for(i=1; i<=number-movement; i++)
		{
			sequence[number-i] = sequence[number-movement-i];
		}
		for(i=0;i<movement;i++)
		{
			sequence[i] = temp[i];
		}
		
//		free(temp);
	}
	
} 

猜你喜欢

转载自blog.csdn.net/kirisame9/article/details/79858704
8-3