本文共 2021 字,大约阅读时间需要 6 分钟。
置换元素和非置换元素
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.
#include#include //function to print the arrayvoid print(int* a,int n){ printf("printing ........\n"); for(int i=0;i
Output
输出量
enter array length,n: 10enter elements:4 5 6 7 8 10 11 34 56 1array before permutationprinting ........4 5 6 7 8 10 11 34 56 1array after permutationprinting ........5 6 7 8 10 11 34 56 1 4
翻译自:
置换元素和非置换元素
转载地址:http://vfazd.baihongyu.com/