#c #visual-c
#c #visual-c
Вопрос:
извините за беспокойство, но я застрял в этом, идея такова:
Вставьте в консоль числа от 1 до 9 (не имеет значения порядок или повторяется ли он) и создайте 2-мерный массив, НО он должен быть упорядочен в ОБРАТНОМ ПОРЯДКЕ по СПИРАЛИ (начиная с центра)
ПРИМЕР 1:
ВВОД (ввод чисел без пробелов):
123456789
ВЫВОД:
789
612
543
ПРИМЕР 2:
ВВОД (ввод чисел без пробелов):
12345678976
ВЫВОД:
7897
6126
543
Я СДЕЛАЛ ЭТО:
для получения чисел и попытки ввести вектор из 2 измерений, но после этого момента я не знаю, как мне сделать спираль…
прикрепил мой код:
#include <iostream>
using namespace std;
int main()
{
int a[] = { 1,2,3,4,5,6,7,8,9 };
int b[3][3];
int k = 0;
int i, j;
int arrSize = sizeof(a) / sizeof(a[0]);
cout << arrSize;
cout << endl;
for (i = 0; i < 3; i )
for (j = 0; j < 3; j )
b[i][j] = a[k ];
for (i = 0; i < 3; i )
{
for (j = 0; j < 3; j )
cout << b[i][j];
cout << endl;
}
}
С помощью этого кода я смогу поместить в 2D-массив.
Заранее благодарю вас за ваше время и терпение со мной!
Комментарии:
1. Добро пожаловать в Stack Overflow. Это не сервис для написания кода или решения задач; вы должны выполнить хотя бы часть работы самостоятельно. Вы можете писать простые программы? Можете ли вы решить эту головоломку с помощью карандаша и бумаги?
2. Попробуйте сначала определить, каковы индексы элемента «center». Я думаю, так и должно быть
[M/2][N/2]
. Затем вы увеличиваете «виртуальный индекс» на 1 каждые две итерации вместе с его знаком: 1, 1, -2, -2, 3, 3, и т.д. и в то же время изменяя направление перемещения, что было бы просто переключением управляемого измерения на каждой итерации.
Ответ №1:
Следующая программа перечисляет последовательность (x, y) для спирали. Первый список с использованием начальных точек, расположенных в (0, 0). Второй перемещает начало спирали в положение (minimum.x, minimum.y). Минимум сохраняет координату левого нижнего элемента.
В программе можно соблюдать правило спирали. Позиция (x, y) сначала начинается с (n, n-1), где n — это n-й цикл спирали. Сначала переместите позицию вниз, —y, пока y не достигнет -n; затем переместите x влево, пока x = -n; затем переместите y вверх, пока y = n; наконец, переместите x вправо, пока x = n . В следующей программе max (n) set = 4 имеется 4 спиральных цикла. Вы можете настроить этот параметр n в соответствии с вашими целями.
Общее количество каждого цикла спирали = 8 * n, за исключением самого внутреннего цикла (0,0), число = 1. Следовательно, количество элементов спирали = 1 8*1 8*2 8*3 …. Сначала вам нужно определить циклы спирали по длине входной строки L, число циклов равно `n = ( (L-1) / 8 1 );` или `n = ( (L-1) / 8);` если ремайдера не осталось.
#include <iostream>
#include <vector>
struct int2 {
int x, y;
int2():x(0), y(0) {}
int2(const int a, const int b):x(a), y(b) {}
int2amp; operator=(const int2amp;) = default;
void print() const {std::cout << "( " << x <<", " << y << ") "; }
int2amp; operator =(const int2amp;a) { this->x = a.x ; this->y = a.y; return *this;}
int2amp; operator-() {x = -x; y = -y; return *this;}
};
int main()
{
std::vector<int2> spiral;
int2 pos, minimum;
int n;
pos = int2(0,0);
minimum = pos;
spiral.push_back(pos);
for (n=1; n<5; n )
{
pos = int2( n, n-1); // starting point for ith loop
spiral.push_back(pos);
while (pos.y > -n) {--pos.y; spiral.push_back(pos); if (pos.y < minimum.y) minimum.y = pos.y;}
while (pos.x > -n) {--pos.x; spiral.push_back(pos); if (pos.x < minimum.x) minimum.x = pos.x; }
while (pos.y < n) { pos.y; spiral.push_back(pos); }
while (pos.x < n) { pos.x; spiral.push_back(pos); }
}
-minimum;
std::cout << "center at (0, 0)n";
for (int i=0; i<spiral.size(); i ) spiral[i].print();
std::cout<<std::endl;
for (int i=0; i<spiral.size(); i ) spiral[i] = minimum;
std::cout << "center at "; minimum.print(); std::cout<<std::endl;
for (int i=0; i<spiral.size(); i ) spiral[i].print();
std::cout<<std::endl;
return 0;
}
Эти позиции выше (x, y) предоставляют вам массив 2-d последовательности [x] [y] для записи символа, образующего спиральную структуру.
center at (0, 0)
( 0, 0) ( 1, 0) ( 1, -1) ( 0, -1) ( -1, -1) ( -1, 0) ( -1, 1) ( 0, 1) ( 1, 1) ( 2, 1) ( 2, 0) ( 2, -1) ( 2, -2) ( 1, -2) ( 0, -2) ( -1, -2) ( -2, -2) ( -2, -1) ( -2, 0) ( -2, 1) ( -2, 2) ( -1, 2) ( 0, 2) ( 1, 2) ( 2, 2) ( 3, 2) ( 3, 1) ( 3, 0) ( 3, -1) ( 3, -2) ( 3, -3) ( 2, -3) ( 1, -3) ( 0, -3) ( -1, -3) ( -2, -3) ( -3, -3) ( -3, -2) ( -3, -1) ( -3, 0) ( -3, 1) ( -3, 2) ( -3, 3) ( -2, 3) ( -1, 3) ( 0, 3) ( 1, 3) ( 2, 3) ( 3, 3) ( 4, 3) ( 4, 2) ( 4, 1) ( 4, 0) ( 4, -1) ( 4, -2) ( 4, -3) ( 4, -4) ( 3, -4) ( 2, -4) ( 1, -4) ( 0, -4) ( -1, -4) ( -2, -4) ( -3, -4) ( -4, -4) ( -4, -3) ( -4, -2) ( -4, -1) ( -4, 0) ( -4, 1) ( -4, 2) ( -4, 3) ( -4, 4) ( -3, 4) ( -2, 4) ( -1, 4) ( 0, 4) ( 1, 4) ( 2, 4) ( 3, 4) ( 4, 4)
center at ( 4, 4)
( 4, 4) ( 5, 4) ( 5, 3) ( 4, 3) ( 3, 3) ( 3, 4) ( 3, 5) ( 4, 5) ( 5, 5) ( 6, 5) ( 6, 4) ( 6, 3) ( 6, 2) ( 5, 2) ( 4, 2) ( 3, 2) ( 2, 2) ( 2, 3) ( 2, 4) ( 2, 5) ( 2, 6) ( 3, 6) ( 4, 6) ( 5, 6) ( 6, 6) ( 7, 6) ( 7, 5) ( 7, 4) ( 7, 3) ( 7, 2) ( 7, 1) ( 6, 1) ( 5, 1) ( 4, 1) ( 3, 1) ( 2, 1) ( 1, 1) ( 1, 2) ( 1, 3) ( 1, 4) ( 1, 5) ( 1, 6) ( 1, 7) ( 2, 7) ( 3, 7) ( 4, 7) ( 5, 7) ( 6, 7) ( 7, 7) ( 8, 7) ( 8, 6) ( 8, 5) ( 8, 4) ( 8, 3) ( 8, 2) ( 8, 1) ( 8, 0) ( 7, 0) ( 6, 0) ( 5, 0) ( 4, 0) ( 3, 0) ( 2, 0) ( 1, 0) ( 0, 0) ( 0, 1) ( 0, 2) ( 0, 3) ( 0, 4) ( 0, 5) ( 0, 6) ( 0, 7) ( 0, 8) ( 1, 8) ( 2, 8) ( 3, 8) ( 4, 8) ( 5, 8) ( 6, 8) ( 7, 8) ( 8, 8)