You need to enable JavaScript to run this app. PHP编程竞赛问题:如何读取指定长度数组并实现右旋转
优惠活动
大模型
产品
解决方案
定价
更多

PHP编程竞赛问题:如何读取指定长度数组并实现右旋转

PHP 动态读取不定长输入数组及数组旋转题解

读取不定长数组的核心方法

你当前的问题在于写死了读取5个元素的逻辑,实际可以通过以下方式动态读取长度为N的数组:

  • 先用fgets(STDIN)读取一整行输入内容
  • 用trim()去除行首尾的换行、空格等冗余字符
  • 用explode(' ', $content)按空格分割为字符串数组
  • 用array_map('intval', $arr)将所有元素转为整数类型
    对应代码片段:
// 已经通过fscanf拿到$n之后
$arr = array_map('intval', explode(' ', trim(fgets(STDIN))));

完整解题代码优化点

  1. 题目第一行是测试用例数量t,需要循环处理每个测试用例
  2. 旋转步数k可以先对n取模,避免k远大于n时的无效循环,提升执行效率
  3. 移除写死的固定长度数组读取逻辑,替换为动态读取
    完整代码如下:
<?php
// 读取测试用例数
fscanf(STDIN, "%d\n", $t);
while ($t--) {
    // 读取当前用例的n和k
    fscanf(STDIN, "%d %d\n", $n, $k);
    // 动态读取长度为n的数组
    $arr = array_map('intval', explode(' ', trim(fgets(STDIN))));
    // 优化旋转步数,避免无效循环
    $k = $k % $n;
    // 向右旋转k步
    for ($i = 0; $i < $k; $i++) {
        array_unshift($arr, array_pop($arr));
    }
    // 输出结果
    echo implode(' ', $arr) . "\n";
}
?>

额外性能优化方案

如果要进一步降低时间复杂度,还可以用数组切片的方式替代循环旋转:

// 替换for循环的旋转逻辑
$arr = array_merge(array_slice($arr, $n - $k), array_slice($arr, 0, $n - $k));

内容的提问来源于stack exchange,提问作者diana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 19:54:04