题目介绍
方法一我们可以先把数字1 2 3 4逆转一下,第二步我们可以逆转一下5 6 7,
最后整体逆置一下就会变成上面的数字。
void reverse(int* nums, int begin, int end)
{while (begin < end){int tmp = nums[begin];nums[begin] = nums[end];nums[end] = tmp;begin++;end--;}
}
void fun(int* nums, int sz, int k)
{reverse(nums, 0, sz - k - 1);reverse(nums, sz - k, sz - 1);reverse(nums, 0, sz - 1);
}
int main()
{int arr[] = { 1,2,3,4,5,6,7 };int sz = sizeof(arr) / sizeof(arr[0]);int k = 0;scanf("%d", &k);fun(arr, sz,k);int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}
这种方法我们一般都不太好想出来,但是还有简单的方法就是我们开辟一个数组空间出来.
第一步利用malloc开辟一个数组空间出来,第二部就是把原数组中的后k个元素拷贝进去,然后再把原数组中前的元素拷贝进去放到后面,最后再把开辟数组中的元素再拷贝回来。
void fun(int* nums, int sz, int k)
{k %= sz;int* tmp = (int*)malloc(sizeof(int) * sz);if (tmp == NULL){perror("fun:malloc");return;}memcpy(tmp,nums+sz-k,sizeof(int)*k);memcpy(tmp + k, nums, sizeof(int) * (sz - k));memcpy(nums, tmp, sizeof(int) * sz);free(tmp);tmp = NULL;
}
int main()
{int arr[] = { 1,2,3,4,5,6,7 };int sz = sizeof(arr) / sizeof(arr[0]);int k = 0;scanf("%d", &k);fun(arr, sz,k);int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}