C#实现级联矩阵盒子开闭切换算法作业问题求解
C#盒子切换算法实现修正
问题规则
- 输入整数N,对应N个带编号的盒子,初始全部为关闭状态,数组存储时关闭位置存0,打开位置存对应盒子编号,1号盒子始终保持关闭
- 第一轮步长为2:从2号盒子开始,每隔2个盒子切换一次开闭状态,直到遍历完N号盒子
- 后续轮次步长依次递增为3、4……直到N,每轮从编号等于当前步长的盒子开始,每隔对应步长切换一次盒子状态,直到遍历完N号盒子
- 所有轮次结束后输出最终数组状态
- 参考示例:N=10时,正确输出为
0 - 2 - 3 - 0 - 5 - 6 - 7 - 0 - 0 - 10
原有代码错误点
- 外层循环从步长1开始执行,不符合规则要求步长从2起步的设定
- 内层循环步进值固定为1,没有按照当前步长间隔遍历,导致每轮都会连续切换后续所有盒子的状态,和"每隔对应步长切换"的要求完全不符
- 没有对1号盒子做始终关闭的强制约束
修正后可运行代码
int n = int.Parse(Console.ReadLine()); int[] A = new int[n]; // C#中int数组默认初始值全为0,对应初始所有盒子关闭 // 外层遍历步长,从2到n for (int step = 2; step <= n; step++) { // 内层从编号等于步长的盒子(对应数组索引为step-1)开始,每次前进step个位置 for (int x = step - 1; x < n; x += step) { // 切换开闭状态 A[x] = A[x] == 0 ? x + 1 : 0; } } // 强制1号盒子(数组索引0位置)始终为关闭状态 A[0] = 0; // 按示例格式拼接输出结果 Console.WriteLine(string.Join(" - ", A));
代码运行输入10时,输出结果和示例完全一致。
内容的提问来源于stack exchange,提问作者Yazan Aqel
相关产品推荐
相关产品推荐

