题目
轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
示例 1:
输入: nums = [1, 2, 3, 4, 5, 6, 7], k = 3
输出 : [5, 6, 7, 1, 2, 3, 4]
解释 :
向右轮转 1 步 : [7, 1, 2, 3, 4, 5, 6]
向右轮转 2 步 : [6, 7, 1, 2, 3, 4, 5]
向右轮转 3 步 : [5, 6, 7, 1, 2, 3, 4]
代码
#include <stdio.h
int* cycle(int* p, int k, int sz) // 这是轮转的函数
{
while (k)//当K的值不为零时接着循环
{
for (int i = 0; i < sz - 1; i++)
{
*(p + sz - 1 - i) = *(p + sz - 2 - i);//逐渐将后位的值改为前位的值
}
*p = *(p + sz - 1);//再将第一位的值改为最后一位的值
k--;
}
}
int main()
{
int nums[7] = {1,2,3,4,5,6,7};//数组
int k = 3;//向右转的位数
int sz = sizeof(nums) / sizeof(nums[0]);//数组的大小
cycle(nums,k,sz);//用于轮转的函数
//打印最终数组
for (int j = 0; j < 7; j++)
{
printf("%d ", nums[j]);
}
return 0;
}
后话
要是有啥错误还请指正,前段时间学习该学python了迷茫了好一会,以后我还会继续学习c语言的,就是好累啊(x.x)