Помогите решить
a1 a2 a3 an
a2 a3 an a1
a3 an a1 a2
an a1 a2 a3
помогите написать код
Циклический сдвиг в интервале. Алгоритмы STL.
а как иначе? в каждои строке идет сдвиг на один елемент
Код:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main() {
double a[10]; //начальная последовательность
double ar[10][10]; //матрица результатов
//задаем числа начальной последовательности
//(одновременно это начальная строка матрицы)
for (int i = 0; i < 10; i++)
a[i] = ar[0][i] = double(i);
vector<double> v(a,a+10); //вектор STL для обработки данных
//сразу инициализируем его начальной последовательностью
cout << "Initial data:" << endl;
copy(v.begin(),v.end(),ostream_iterator<double>(cout, "; "));
cout << endl << endl;
//остальные строки матрицы:
for (int i = 1; i < 10; i++) {
rotate(v.begin(),v.begin()+1,v.end());
copy(v.begin(),v.end(), ar[i]);
}
cout << "Result:" << endl;
for (int i = 0; i < 10; i++) {
for (int j = 0; j<10; j++)
cout << ar[i][j] << " ";
cout << endl;
}
return 0;
}
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main() {
double a[10]; //начальная последовательность
double ar[10][10]; //матрица результатов
//задаем числа начальной последовательности
//(одновременно это начальная строка матрицы)
for (int i = 0; i < 10; i++)
a[i] = ar[0][i] = double(i);
vector<double> v(a,a+10); //вектор STL для обработки данных
//сразу инициализируем его начальной последовательностью
cout << "Initial data:" << endl;
copy(v.begin(),v.end(),ostream_iterator<double>(cout, "; "));
cout << endl << endl;
//остальные строки матрицы:
for (int i = 1; i < 10; i++) {
rotate(v.begin(),v.begin()+1,v.end());
copy(v.begin(),v.end(), ar[i]);
}
cout << "Result:" << endl;
for (int i = 0; i < 10; i++) {
for (int j = 0; j<10; j++)
cout << ar[i][j] << " ";
cout << endl;
}
return 0;
}
P.S. Советую самостоятельно потренироваться -- переделать в более красивое решение, совместив ротацию и копирование с помощью rotate_copy.
Код:
#include <iostream>
using namespace std;
int main() {
const double a[] = {0,1,2,3,4,5,6,7,8,9};
const int k = sizeof(a)/sizeof(double);
double aa[k][k];
for (int i = 0; i < k; i++) {
for (int j = i; j < k; j++)
cout << (aa[i][j-i] = a[j]) << " ";
for (int j = 0; j < i; j++)
cout << (aa[i][k-i+j] = a[j]) << " ";
cout << endl;
}
return 0;
}
using namespace std;
int main() {
const double a[] = {0,1,2,3,4,5,6,7,8,9};
const int k = sizeof(a)/sizeof(double);
double aa[k][k];
for (int i = 0; i < k; i++) {
for (int j = i; j < k; j++)
cout << (aa[i][j-i] = a[j]) << " ";
for (int j = 0; j < i; j++)
cout << (aa[i][k-i+j] = a[j]) << " ";
cout << endl;
}
return 0;
}