置换元素和非置换元素_循环置换数组元素的C程序

置换元素和非置换元素

Problem statement: Write a c program to cyclically permute the element of an array. (In right to left direction). Array should be taken as input from the user.

问题陈述:编写一个c程序来循环置换array的元素 。 (从右到左方向)。 数组应作为用户的输入。

Explanation with example:

举例说明:

Let the user input for the array be: 4 5 6 7 8 10 11 34 56 1

让用户输入该数组为: 4 5 6 7 8 10 11 34 56 1

The cyclic permutation operation on the array results in rotation of the array by one position in right to left direction.

阵列上的循环置换操作导致阵列从右到左方向旋转一个位置。

Thus the array becomes: 5 6 7 8 10 11 34 56 1 4

因此,该数组变为: 5 6 7 8 10 11 34 56 1 4

i.e. the first element becomes the last element & the rest of the elements are shifted by one position.

也就是说,第一个元素变为最后一个元素,其余元素移位一个位置。

Algorithm:

算法:

    To shift the (i+1)th element to the left 
    can be easily done only by:
    A[i] =A[i+1]; // A is the input array

    So it may seem that the entire shifting can be done by
    For i =0:n-1
        A[i] =A[(i+1)%n];
    End For
    
    But this will lead to wrong solution since for i=n-1
    A[n-1]=A[0] which is correct statement but A[0] has been 
    updated already. This code snippet will result in 
    A[0] & A[n-1] to be same which is actually wrong. 

    So what we need to do is to store A[0] ( staring element) 
    and assign this value to A[n-1]

    Thus, a little modification can lead to correct solution:
    1.  Set temp to A[0]
    2.  For i=0:n-1
            If i==n-1
                A[i]=temp; //actually it means A[n-1]=A[0]
            Else
                A[i]=A[i+1];
            End If
        End For

    3.  Print the updated array.


循环置换数组元素的C实现 (C Implementation for Cyclically Permute the Elements of an Array)

#include <stdio.h>
#include <stdlib.h>

//function to print the array
void print(int* a,int n){
	printf("printing ........\n");
	for(int i=0;i<n;i++)
		printf("%d ",a[i]);
	printf("\n");
}

int* cyclicallyPermute(int* a,int n){
	int temp=a[0];//store a[0]

	for(int i=0;i<n;i++){
		//for the last element in the modified array 
		//it will be starting elemnt    
		if(i==n-1) 
			a[i]=temp;
		//for other element shift left    
		else
			a[i]=a[i+1];
	}

	return a;    
}

int main()
{   
	int n;
	
	printf("enter array length,n: ");
	scanf("%d",&n);
	
	//allocating array dynamically
	int* a=(int*)(malloc(sizeof(int)*n));

	printf("enter elements: \n");
	//taking input
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);

	printf("array before permutation\n");
	print(a,n);
	
	//function to permute cyclically
	//returning base adress of modified array
	a=cyclicallyPermute(a,n);

	printf("array after permutation\n");
	print(a,n);

	return 0;
}

Output

输出量

enter array length,n: 10
enter elements:
4 5 6 7 8 10 11 34 56 1
array before permutation
printing ........
4 5 6 7 8 10 11 34 56 1
array after permutation
printing ........
5 6 7 8 10 11 34 56 1 4 


翻译自: https://www.includehelp.com/c-programs/cyclically-permute-the-elements-of-an-array.aspx

置换元素和非置换元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值