Мне трудно найти правильный путь для решения этой проблемы. Любая помощь будет принята с благодарностью. :) Прошлая проблема - моя попытка. Не стесняйтесь критиковать его.
Напишите функцию 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;
}