C/C++ - 不使用内置函数旋转数组的有效方法(作业)

2023-12-05

任务是将数组的子数组向左或向右旋转给定次数。

让我用一个例子来解释这一点:

  • 让 data 成为一个数组。

数据 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

  • 子数组由参数 begin 和 end 确定。

如果 begin = 3 且 end = 7,则子数组为 {0, 1, 2,3、4、5、6、7、 8, 9};

如果 begin = 7 且 end = 3,则子数组为 {0, 1, 2, 3, 4, 5, 6,7, 8, 9};

  • 让我们向右旋转两次

如果 begin = 3 且 end = 7,则结果为 {0, 1, 2,6、7、3、4、5、 8, 9};

如果 begin = 7 且 end = 3,则结果为 {8, 9, 0, 1,, 4, 5, 6,2, 3, 7};

我已经编写了执行此任务的代码,但速度很慢。 有人可以给我提示如何让它更快吗? 重要提示:除了数据、子程序和内置函数之外,我不允许使用其他数组。

#include <iostream>
using namespace std;

int main(){

    int dataLength;

    cin >> dataLength;

    int data [ dataLength ];

    for (int i = 0; i < dataLength; i++){
        cin >> data [ i ];
    }


    int begin;
    int end;
    int rotation;
    int forLoopLength;
    int tempBefore;
    int tempAfter;

    cin >> begin;
    cin >> end;
    cin >> rotation;

    if (end > begin)
       forLoopLength = (end - begin) + 1;
    else
       forLoopLength = (end - begin) + 1 + dataLength;

    if (rotation < 0) 
       rotation = forLoopLength + (rotation % forLoopLength);
    else
        rotation = rotation % forLoopLength;

    for (int i = 0; i < rotation; i++) {

        tempBefore = data [ end ];

        for (int i = 0; i < forLoopLength; i++) {
            tempAfter = data [ (begin + i) % dataLength ];
            data [ (begin + i) % dataLength ] = tempBefore;
            tempBefore = tempAfter;
        }
    }

    for (int i = 0; i < dataLength; i ++ ) {
        cout << data [ i ] << " ";
    }

    return 0;
}

这有一个技巧。如果课堂上没有提到这个技巧,你会把这个作为家庭作业,这很奇怪。反正...

将 N 个元素的序列向左旋转 M:

  • 颠倒整个顺序
  • 反转最后 M 个元素
  • 反转前 N-M 个元素

done

例如还剩 2: 1234567 -> 7654321 -> 7654312 -> 3456712

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++ - 不使用内置函数旋转数组的有效方法(作业) 的相关文章

随机推荐

  • 如何将 UIActivityIndi​​catorView 放入 UIAlertController 中?

    我们正在放弃 MBProgressHUD 因为它在我们的应用程序中故障太多 并且没有阻止用户输入或提供 取消 按钮等功能 所以 我尝试实施滑动瞄准器如何在 UIAlertController 的中心显示活动指示器 我遇到了指标定位不当的情况
  • ng-repeat 和 ui-if

    当我想将 ui if anguluarUi 与 ng repeat 一起使用时 我认为它在那里最有用 我收到错误 Error Multiple directives uiIf ngRepeat asking for transclusion
  • Firebase HTTP 函数 CORS

    使用 Firebase HTTP 函数时 我仍然遇到 CORS 问题 这是我的网络控制台错误 Response to preflight request doesn t pass access control check No Access
  • 将图像的左侧拉伸到容器外到页面边缘

    通常我很擅长 CSS 但我不知道如何进行这个特定的布局 我有一个最大宽度为 1 400 像素的容器 左边距和右边距设置为auto因此 当视口高于 1 400 像素时 容器会居中 然后 我在容器外部有一个图像 旁边有一个 div 图像占据了视
  • 获取所选元素的位置,而不是 DOM 中元素的索引

    div h3 Heading one h3 h3 Heading two h3 h4 heading caption h4 h3 Heading three h3 div 我想获取 jQuery 选择中元素的位置 而不是它在 DOM 中的索
  • 如果表单字段为空,则阻止使用 ajax 提交表单

    我在简单的表格上遇到了一些麻烦 如果字段为空 我似乎无法阻止表单提交 有没有一种简单的方法来检查字段是否为空 然后阻止表单提交 这是我的 html 表单
  • 将 WordPress 身份验证与现有用户数据库集成

    我有一个包含用户表的数据库 其中包含以下字段 id name email password status 我的用户通过提供电子邮件和密码登录 我安装了一个博客 其路径为 mysite com news 我想要的是 如果某个用户在我的网站上注
  • 尝试获取 iPhone 屏幕尺寸时的 EXC_BAD_ACCESS

    当界面方向发生变化时 我试图使某些元素根据屏幕尺寸调整大小 我在不同的地方 包括这里的一些答案 读到 获取屏幕边界的方法是使用 UIScreen mainScreen bounds 所以我添加了这段代码来看看它的行为方式 void will
  • 将特殊字符转换为常规 C#

    C 中是否有命令可以转换字符串 例如 https 3A 2F 2Fwww google com回到https www google com 也许某种 解密 方法 你需要使用System Web HttpUtility UrlDecode为了
  • 如何从 ImageView 将图像设置为壁纸?

    我有一个活动 其中有两个按钮和一个 ImageView 一个按钮是从手机的相机应用程序中获取图像并将其设置到 ImageView 另一个按钮是将该图像设置为主屏幕壁纸 所以我想要代码如何将该图像从 ImageView 设置到壁纸 Step
  • 如何使字符串比较不区分大小写?

    我正在尝试为其中一个根据您的答案做出响应的程序编写代码 我想让一些变量不区分大小写 例如如果我的变量x等于 Me 我希望它也等于 me 那可能吗 到目前为止 这是我的代码 import java util Scanner class Tut
  • 注册自动登录禁用

    我在我的项目中使用 keycloak 4 8 3 Final 我需要在注册后禁用自动登录 我已经阅读 keycloak 文档 5 天了 找不到答案 不知道是否可行 任何指南都会对我有用 谢谢 如果注册后想再次显示Keycloak登录表单 可
  • 使用按钮调整简单的表单字段值

    首先 我对反应管理非常陌生 我有一个 SimpleForm 它通过 API 调用填充一堆字段
  • 在 WooCommerce Checkout 中为特定类别启用百分比折扣的复选框

    以下修改后的代码基于添加一个结账复选框字段 在 Woocommerce 中启用百分比费用 我已经进行了调整 但希望只针对特定类别 因此当学生在结账时勾选方框并定义他们是学生时 系统会扣除总金额的 15 但仅限于特定类别范围 即 在线研讨会
  • 如何测量管道系统调用时间(以毫秒为单位)?

    我想查看我的管道程序系统调用的时间 我需要测量它来分析结果 如何测量系统调用的时间 以毫秒为单位 例如 这是简单的管道程序 include
  • 如何让 Watson 捕获数字序列 (input.text.extract)

    在我的示例中 我要求提供个人文档编号 该编号有 11 位数字 并且我需要 如果用户正确输入 11 个数字 watson 就会继续对话 如果没有 watson 将通知由我 这个怎么做 我的情况 沃森 说 好的 我会检查一下 您的协议号是多少
  • Microsoft.VisualStudio..Default.props”未找到

    我一直在四处寻找 但我得到的是类似的东西 The imported project C Microsoft Cpp Default props was not found instead of C Program Files x86 MSB
  • 如何正确等待不可等待的操作完成

    在我的应用程序中 我创建了一个 SerializedBitmapImage 类 它在从互联网下载另一个图像时显示默认图像 它还允许将下载的图像序列化为字节数组 因此不需要在每次应用程序启动时下载图像 我目前在 Card 类中有一个 Seri
  • 为什么必须用括号括住数字才能调用 toFixed ?

    例如 1 toFixed 2 Uncaught SyntaxError Invalid or unexpected token 1 toFixed 2 1 00 let num 1 num toFixed 2 1 00 同时 您不必将字符串
  • C/C++ - 不使用内置函数旋转数组的有效方法(作业)

    任务是将数组的子数组向左或向右旋转给定次数 让我用一个例子来解释这一点 让 data 成为一个数组 数据 0 1 2 3 4 5 6 7 8 9 子数组由参数 begin 和 end 确定 如果 begin 3 且 end 7 则子数组为