请编写程序将一个大小为n的整数数组循环左移m位。
大一计算机生数据结构的题目qaq我这个笨蛋是真的不会
按数学思路理解 这里是最最笨的一种方法: 有优化的方案,但这个应该最适合理解,你可以看看~
int main(void)
{
const int n = 10;
int a[n] = { 1,2,3,4,5,6,7,8,9,10 };
int m = 3;
//主要是思路 循环左移 是不是就是把前m个提取,把剩下的n-m个移动到最前面,然后剩下的位置再把m个放进去
//最笨的办法就是申请同样大的内存 按位置放
int res[n] = { 0 }; //这个存储最后的结果
//就是把 4 5 6 7 8 9 10 1 2 3 存进来 分两步
for (int i = m; i < n; i++) //从第m个开始,往前面放,注意数组下标从零开始的
{
res[i - m] = a[i]; //这是把数据往前面的位置放 这里就是 放 4 5 6 7 8 9 10
}
for (int i = 0; i < m; i++)//把前面剩下的放到最后面去 也就是1 2 3放在上面已经赋值的后面
{
res[n - m +i] = a[i];//注意这里从n-m开始
}
for (int i = 0; i < n; i++)
{
printf("%d ", res[i]); //输出就是 4 5 6 7 8 9 10 1 2 3
}
printf("\n");
return 0;
}