请编写程序将一个大小为n的整数数组循环左移m位。
大一计算机生数据结构的题目qaq我这个笨蛋是真的不会
1条回答 默认 最新
- yun6853992 2022-03-01 17:23关注
按数学思路理解 这里是最最笨的一种方法: 有优化的方案,但这个应该最适合理解,你可以看看~
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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用 1