C语言实现数组右移K步程序多测试用例运行异常求助
问题分析与修复方案
核心故障原因
你的代码中用于计数旋转次数的shiftcount变量只在程序入口处初始化了一次为0,当第一个测试用例执行完毕后,shiftcount已经累加到和第一个用例的旋转步数shiftlimit相等。在处理第二个及后续测试用例时,while(shiftcount != shiftlimit)的判断条件会直接不成立,数组不会执行旋转逻辑,直接输出原数组,因此结果不符合预期。
修复方法
在每个测试用例的旋转逻辑执行前,将shiftcount重置为0即可。
你也可以额外增加步数取模逻辑shiftlimit = shiftlimit % n,避免当旋转步数大于数组长度时的无效旋转,优化执行效率。
修正后代码
#include<stdio.h> int main() { int i,n,a[100],temp,shiftlimit,cyclelimit; int shiftcount = 0; int cyclcount = 0; scanf("%d",&cyclelimit); while(cyclcount != cyclelimit){ scanf("%d",&n); scanf("%d",&shiftlimit); // 优化:步数取模减少无效旋转 shiftlimit = shiftlimit % n; for(i=0;i<n;i++) { scanf("%d",&a[i]); } // 每次测试用例重置旋转计数 shiftcount = 0; while(shiftcount != shiftlimit){ temp=a[n-1]; for(i=n-1;i>0;i--) { a[i]=a[i-1]; } a[0]=temp; shiftcount += 1; } for(i=0;i<n;i++){ printf("%d ",a[i]); } printf("\n"); cyclcount +=1; } return 0; }
内容的提问来源于stack exchange,提问作者Aaditya
相关产品推荐
相关产品推荐

