Как мне сдвинуть все строки матрицы вниз на одну строку, заменив верхний ряд нижним? - PullRequest
0 голосов
/ 30 апреля 2020

Мне трудно найти правильный путь для решения этой проблемы. Любая помощь будет принята с благодарностью. :) Прошлая проблема - моя попытка. Не стесняйтесь критиковать его.

Напишите функцию R cpp NumericMatrix rotateDown (NumericMatrix m), которая возвращает новую матрицу, содержащую содержимое m с каждым элементом, смещенным вниз на одну строку. Элементы в последнем ряду должны быть перемещены в первый ряд матрицы. Например, если x - это матрица

3 1 5 8 1

6 2 4 3 2

9 8 7 6 3

4 6 9 7 4

rotateDown (x) должен вернуть матрицу

4 6 9 7 4

3 1 5 8 1

6 2 4 3 2

9 8 7 6 3

#include <iostream>
#include "Rcpp.h"
using namespace std;

// [[Rcpp::export]]
NumericMatrix rotateDown(NumericMatrix m) {
   int rowA; 
   int rowB;
   int nrow=m.nrow();
   int ncol=m.ncol();
   if(rowA<1 || rowA>nrow || rowB<1 || rowB>nrow) {
      throw -1;
   }
   rowA--;
   rowB--;
   for(int j=0; j<ncol; j++) {
      for(rowA=0; rowA<nrow; rowA++) {
         for(rowB=1; rowB<nrow; rowA++) {
            if(rowA=nrow-1) {
               m(2, j)=m(0, j);
            }
            double temp=m(rowA, j);
            m(rowA, j)=m(rowB, j);
            m(rowB, j)=temp;
         }
      }
   }
   return m;
}
//must keep below code
int main() {
   int rows;
   int cols;
   cin >> rows >> cols;
   NumericMatrix x = readMatrix<double>(rows, cols);
   cout << rotateDown(x);
   return 0;
}
...