the question is, how write function shifts array's elements given number, whether number positive or negative? example, given array
{22, 33, 44, 55, 66, 77, 88, 99}
and user wants shift 3 elements, array should become:
{77, 88, 99, 22, 33, 44, 55, 66}
my declaration function looks void rotate(int a[], int n, int k) where:
aarraynnumber of elements in arrayknumbers of elements shift by
so above example call: void rotate(a, 8, 3)
this have far:
#include <iostream> using namespace std; void rotate (int [], int, int); int main() { cout << "how many numbers wanna enter?"<< endl << "enter number: "; int n; int i; cin >> n; int a[n]; cout << "now have enter " << n << "number in array."<< endl<< "pls eneter number aaray"<<endl; (i=0; i<n; i++) { cout << "a["<<i<<"] = "; cin >> a[i]; } cout << "how many numbers wanna shift?"<< "pls eneter number: "; int k; cin >> k; rotate(a,n,k); (i=0; i<n; i++) cout<<"a["<<i<<"] = "<<a[i]<<endl; return 0; } void rotate (int a[] , int n , int k ){ if (k>0){ } else if (k<0){ } }
as nathan oliver states you're trying reinvent rotate. given input: int a[] = {22,33,44,55,66,77,88,99} do:
rotate(begin(a), next(begin(a), ((-k % size(a)) + size(a)) % size(a)), end(a)); if don't have c++17, can this:
const auto size = sizeof(a) / sizeof(a[0]); rotate(begin(a), next(begin(a), ((-k % size) + size) % size), end(a)); let me unpack math here:
- the interior
(-k % size(a))invertskmatchrotate's approach, mods ensurek < size(a) && -k > size(a) - the middle addition:
((-k % size(a)) + size(a))removes negative such value lesssize(a) * 2, greater0 - the exterior
((-k % size) + size) % sizeputs value in range of legal inputsnext; lesssize(a), greater or equal0
next(begin(a), ((-k % size) + size) % size) selecting element of array rotated first element in array:
- for
k = 7first element be:next(begin(a), 1),acontain:{33, 44, 55, 66, 77, 88, 99, 22}
- for
k = 6first element be:next(begin(a), 2),acontain:{44, 55, 66, 77, 88, 99, 22, 33}
- for
k = 5first element be:next(begin(a), 3),acontain:{55, 66, 77, 88, 99, 22, 33, 44}
- for
k = 4first element be:next(begin(a), 4),acontain:{66, 77, 88, 99, 22, 33, 44, 55}
- for
k = 3first element be:next(begin(a), 5),acontain:{77, 88, 99, 22, 33, 44, 55, 66}
- for
k = 2first element be:next(begin(a), 6),acontain:{88, 99, 22, 33, 44, 55, 66, 77}
- for
k = 1first element be:next(begin(a), 7),acontain:{99, 22, 33, 44, 55, 66, 77, 88}
- for
k = 0first element be:next(begin(a), 0),acontain:{22, 33, 44, 55, 66, 77, 88, 99}
- for
k = -1first element be:next(begin(a), 1),acontain:{33, 44, 55, 66, 77, 88, 99, 22}
- for
k = -2first element be:next(begin(a), 2),acontain:{44, 55, 66, 77, 88, 99, 22, 33}
- for
k = -3first element be:next(begin(a), 3),acontain:{55, 66, 77, 88, 99, 22, 33, 44}
- for
k = -4first element be:next(begin(a), 4),acontain:{66, 77, 88, 99, 22, 33, 44, 55}
- for
k = -5first element be:next(begin(a), 5),acontain:{77, 88, 99, 22, 33, 44, 55, 66}
- for
k = -6first element be:next(begin(a), 6),acontain:{88, 99, 22, 33, 44, 55, 66, 77}
- for
k = -7first element be:next(begin(a), 7),acontain:{99, 22, 33, 44, 55, 66, 77, 88}
Comments
Post a Comment