有人可以在我的矩阵旋转代码中找到该错误吗?

te7

我正在尝试进行hackerrank矩阵旋转挑战。我的代码中有一个我找不到的错误。该代码应该旋转测试矩阵的所有外循环和内循环r次(1 <= r <= 10 E 9)。如果我不对r进行模运算,则代码会正常运行,除了r的较高值(在hackerrank服务器上超时)之外。如果我对r做模,那么代码将使r> =(r%number_of _elements_in_outer_loop)的测试案例失败。我找不到错误。预先感谢您的任何答复。以下是代码(在Visual Studio 2015中进行测试)。要求的hackerrank挑战就在这里

// MatrixRotation.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
//  int i, j, k;
    int m, n, r;
    int rotations, rot;
    int m_start, m_end, m_len;
    int n_start, n_end, n_len;
    int m_curr, n_curr;

//-------------------------------------------------------------------------
// For hackerrank testing
//-------------------------------------------------------------------------

    int i, j;

    for (i = 1; i <= 3; i++)
    {

        if (i == 1) std::cin >> m;
        else if (i == 2) std::cin >> n;
        else std::cin >> r;

    }

    int **matrix = new int*[m];
    for (int i = 0; i < m; ++i) {
        matrix[i] = new int[n];
    }

    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
            std::cin >> matrix[i][j];


    //-------------------------------------------------------------------------
    // For local machine in Visual Studio testing
    //-------------------------------------------------------------------------

    /*

    int i, j, k;

    m = 10;
    n = 8;
    r = 40;

    int **matrix = new int*[m];
    for (int i = 0; i < m; ++i) {
        matrix[i] = new int[n];
    }

    k = 1;
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
        {
            matrix[i][j] = k;
            k += 1;
        }

    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
        {
            std::cout << matrix[i][j] << " ";

            if (j == n - 1)
                std::cout << endl;

        }

    std::cout << endl;

    */

    //-------------------------------------------------------------------------
    // Begin computations
    //-------------------------------------------------------------------------

    int outer_loop_rotation;

    outer_loop_rotation = (n - 1)  + (m - 1) + (n - 1) + (m - 1)  ;

    rot = r % outer_loop_rotation;

//  std::cout << endl << endl << "outer loop rotation = " << outer_loop_rotation << endl << endl << "rot = " << rot << endl << endl;

    for (rotations = 1; rotations <= rot; rotations++)
    {

        m_start = 0;
        m_end = m - 1;

        n_start = 0;
        n_end = n - 1;

        m_len = m_end - m_start;
        n_len = n_end - n_start;


        // Following while loop is 1 rotation for all loops

        while (m_len >= 1 && n_len >= 1)
        {

            int loop_start = matrix[m_start][n_start];

            // Following for loop is for row start

            m_curr = m_start;
            n_curr = n_start;

            for (i = 1; i <= n_len  ; i++)
            {

                matrix[m_curr][n_curr] = matrix[m_curr][n_curr + 1];
                n_curr += 1;

            }

            // Following for loop is for col end

            m_curr = m_start;
            n_curr = n_end;

            for (i = 1; i <= m_len  ; i++)
            {

                matrix[m_curr][n_curr] = matrix[m_curr + 1][n_curr];
                m_curr += 1;

            }

            // Following for loop is for row end

            m_curr = m_end;
            n_curr = n_end;

            for (i = 1; i <= n_len  ; i++)
            {

                matrix[m_curr][n_curr] = matrix[m_curr][n_curr - 1];
                n_curr -= 1;

            }

            // Following for loop is for col start

            m_curr = m_end;
            n_curr = n_start;

            for (i = 1; i <= m_len   ; i++)
            {
                if (i < m_len )
                {
                    matrix[m_curr][n_curr] = matrix[m_curr - 1][n_curr];
                    m_curr -= 1;


                }

                else
                {

                    matrix[m_curr][n_curr] = loop_start;


                }

            }

            m_start += 1;
            m_end -= 1;

            n_start += 1;
            n_end -= 1;

            m_len = m_end - m_start;
            n_len = n_end - n_start;


        } // End while loop

    } // End for loop

    // End computations, now output to command line

    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
        {
            std::cout << matrix[i][j] << " ";

            if (j == n - 1)
                std::cout << endl;

        }


    return 0;
}
萨格马克

我认为错误是您只为整个矩阵计算一次模量值,对应于旋转最外层的循环重复长度。但是,矩阵中的每一层都将具有不同的循环长度。例如,在计算时,最外层的重复循环长度为:

(n - 1)  + (m - 1) + (n - 1) + (m - 1)

但是,对于第二至最外层,重复长度为:

(n - 3)  + (m - 3) + (n - 3) + (m - 3)

或更一般地

((n - ((layer*2)+1))  + (m - ((layer*2)+1))) * 2

其中最外层是0,第二到最外层是1,依此类推。

因此,您需要更改代码以计算每一层的模数,而不是整个矩阵的模数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有人可以在我的代码中找到错误吗

来自分类Dev

有人可以在我的代码中找到错误吗?

来自分类Dev

有人可以找到错误并验证我的Swift NSURLSession代码吗?

来自分类Dev

有人可以解释我在闪存中找到的VBscript脚本文件吗?

来自分类Dev

我遇到两个错误,有人可以帮我找到它们吗?

来自分类Dev

有人可以帮我解决我的python代码错误吗?

来自分类Dev

有人可以解释一下在Pebble C Watchface教程中找到的部分代码吗?

来自分类Dev

有人可以描述我在GNU llibc的mallo.c中找到的以下函数体吗?

来自分类Dev

有人可以帮我在 R 语言中找到每分钟 x 列的平均值吗

来自分类Dev

有人可以告诉我这个sql代码中的错误吗?

来自分类Dev

有人可以指出这段代码中的错误吗?

来自分类Dev

有人可以向我解释此代码吗?

来自分类Dev

有人可以帮我简化这段代码吗?

来自分类Dev

有人可以帮助修复我的代码吗?

来自分类Dev

有人可以帮我这个代码吗?

来自分类Dev

有人可以帮我编写代码吗?(Java)

来自分类Dev

有人可以绕过我的角度代码吗

来自分类Dev

有人可以向我解释这段代码吗

来自分类Dev

有人可以为我解释这段代码吗

来自分类Dev

有人可以解释我这段代码吗?

来自分类Dev

有人可以帮我清理代码/组合吗

来自分类Dev

有人可以帮我解决这个错误吗?

来自分类Dev

我在执行Servlet时遇到404资源未找到错误,有人可以纠正它吗?

来自分类Dev

我对代码块还很陌生,我在此错误上花了太多时间。有人可以指出我在此代码中的错误吗?

来自分类Dev

有人可以告诉我我的代码有什么问题吗?

来自分类Dev

有人可以告诉我我的代码有什么问题吗?[Python 2.7.1]

来自分类Dev

有人可以向我解释为什么该按钮不起作用吗?

来自分类Dev

有人可以帮助我使用Enter键执行该程序吗?

来自分类Dev

我使用cx_Freeze编译了我的python代码,代码在此之前运行良好,现在显示此错误有人可以帮助我吗?

Related 相关文章

  1. 1

    有人可以在我的代码中找到错误吗

  2. 2

    有人可以在我的代码中找到错误吗?

  3. 3

    有人可以找到错误并验证我的Swift NSURLSession代码吗?

  4. 4

    有人可以解释我在闪存中找到的VBscript脚本文件吗?

  5. 5

    我遇到两个错误,有人可以帮我找到它们吗?

  6. 6

    有人可以帮我解决我的python代码错误吗?

  7. 7

    有人可以解释一下在Pebble C Watchface教程中找到的部分代码吗?

  8. 8

    有人可以描述我在GNU llibc的mallo.c中找到的以下函数体吗?

  9. 9

    有人可以帮我在 R 语言中找到每分钟 x 列的平均值吗

  10. 10

    有人可以告诉我这个sql代码中的错误吗?

  11. 11

    有人可以指出这段代码中的错误吗?

  12. 12

    有人可以向我解释此代码吗?

  13. 13

    有人可以帮我简化这段代码吗?

  14. 14

    有人可以帮助修复我的代码吗?

  15. 15

    有人可以帮我这个代码吗?

  16. 16

    有人可以帮我编写代码吗?(Java)

  17. 17

    有人可以绕过我的角度代码吗

  18. 18

    有人可以向我解释这段代码吗

  19. 19

    有人可以为我解释这段代码吗

  20. 20

    有人可以解释我这段代码吗?

  21. 21

    有人可以帮我清理代码/组合吗

  22. 22

    有人可以帮我解决这个错误吗?

  23. 23

    我在执行Servlet时遇到404资源未找到错误,有人可以纠正它吗?

  24. 24

    我对代码块还很陌生,我在此错误上花了太多时间。有人可以指出我在此代码中的错误吗?

  25. 25

    有人可以告诉我我的代码有什么问题吗?

  26. 26

    有人可以告诉我我的代码有什么问题吗?[Python 2.7.1]

  27. 27

    有人可以向我解释为什么该按钮不起作用吗?

  28. 28

    有人可以帮助我使用Enter键执行该程序吗?

  29. 29

    我使用cx_Freeze编译了我的python代码,代码在此之前运行良好,现在显示此错误有人可以帮助我吗?

热门标签

归档