
B1008 数组元素循环右移问题 (20 分)
读取输入:首先读取输入的两个整数N和M,然后读取包含N个整数的数组A。 处理特殊情况:如果M为0,则直接输出原数组;如果M等于N,同样输出原数组。 计算有效位移:使用取模运算计算M的有效值,避免不必要的循环。 数组分割与拼接:将数组分成两部分,前部分是数组的前N-M个元素,后部分是数组的后M个元素。然后将这两部分拼接起来,得到最终的数组。 输出结果:将拼接后的数组按顺序输出,元素之间用空格分隔。
发布日期:2021-05-07 06:46:55
浏览次数:14
分类:精选文章
本文共 999 字,大约阅读时间需要 3 分钟。
循环右移数组的问题通常可以通过将数组分成两部分来处理,然后将后面的部分移到前面。这种方法的时间复杂度是O(N),且实现起来相对简单。以下是详细的解决方案:
以下是具体的实现代码:
#includeint main() { int n, m; scanf("%d %d", &n, &m); m %= n; // 计算有效位移 int a[100]; for (int i = 0; i < n; ++i) { scanf("%d", a + i); } // 处理循环右移 int new_a[100]; for (int i = 0; i < n; ++i) { new_a[i] = a[(i + n - m) % n]; } // 输出结果 printf("循环右移后的数组是: "); for (int i = 0; i < n; ++i) { if (i != 0) { printf(" "); } printf("%d", new_a[i]); } printf("\n"); return 0;}
解释:
- 读取输入:使用
scanf
函数读取输入,首先是两个整数N和M,然后是包含N个整数的数组。 - 处理特殊情况:如果M为0或等于N,直接输出原数组。
- 计算有效位移:使用
m %= n
确保M在0到N-1之间,避免不必要的循环。 - 数组分割与拼接:通过循环将数组分成两部分,前N-M部分和后M部分,然后将两部分拼接成新的数组。
- 输出结果:将拼接后的数组元素按顺序输出,元素之间用空格分隔,确保格式正确。
这种方法高效且易于实现,能够在O(N)时间复杂度内完成任务,适用于N较小的情况。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月26日 17时10分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
STM8 GPIO模式
2019-03-05
omnet++
2019-03-05
23种设计模式一:单例模式
2019-03-05
Qt中的析构函数
2019-03-05
C语言实现dijkstra(adjacence matrix)
2019-03-05
C语言学习从初级到精通的疯狂实战教程-徐新帅-专题视频课程
2019-03-05
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2019-03-05
NAT工作原理
2019-03-05
Processes, threads and goroutines
2019-03-05
c++中的10种常见继承
2019-03-05
Vue学习—深入剖析渲染函数
2019-03-05
wxpython的Hello,World代码探索
2019-03-05
【数字图像处理】OpenCV3 学习笔记
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
KeepAlived介绍、配置示例、KeepAlived配置IPVS、调用脚本进行监控
2019-03-05
Scala集合-数组、元组
2019-03-05
04 程序流程控制
2019-03-05
C++&&STL
2019-03-05
子集(LeetCode 78)
2019-03-05