Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите пожалуйста с кодом (C++)

88K
07 декабря 2014 года
perch.anton@gmail.com
4 / / 07.12.2014
Дана действительная квадратная матрица размера n. Расположить элементы матрицы следующим образом:
88K
07 декабря 2014 года
perch.anton@gmail.com
4 / / 07.12.2014
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <iostream>
#include <conio.h>

int Input(int **mt, int i, int j, int n);
void Ouput(int **mt, int i, int j, int n);


int main()
{
setlocale(LC_ALL, "Russian");
int i, j, n;
int **mt;
int tmp;


mt = (int**)malloc(3 * sizeof(int*));
if (!mt) return 0;


for (i = 0; i < 3; ++i)
*(mt + i) = (int*)malloc(3 * sizeof(int));
if (!*(mt + i)) return 0;

do
{
printf("Введите размеры матрицы = ");
scanf_s("%d", &n);
} while (n <= 0);



//Вводим элементы
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
printf("nВведите элементы [%d][%d] = ", i + 1, j + 1);
scanf_s("%d", *(mt + i) + j);
}



//Выводим получившееся
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%3d ", mt[j]);
}
printf("n");
}
system("pause");
return 0;
}



Это ввод и вывод матрицы, как заставить её стать змейкой??????
88K
08 декабря 2014 года
Roleri
9 / / 02.12.2014
Разбейте путь змейки на участки, где она движется вправо, вниз, влево и вверх, и немного посчитайте.
На первом круге каждый участок имеет длину n - 1, на каждом следующем круге становится короче на 2.
Ниже я заполнил половину таблицы :)
Код:
int s; // первое число в заполняемой строке или столбце
for (i = 0; i < n; ++i)
  memset(*(mt + i), 0, n * sizeof(int)); // когда змейкой будет заполнена вся таблица, обнуление станет ненужным

// змейка движется вправо
s = 1;
for (i = 0; i < n/2; ++i)
{
  for (j = i; j < n - 1 - i; ++j)
    mt[i][j] = s + j - i;
  s += (n - 1 - 2 * i) * 4; // увеличиваем на длину i-го круга
}

// змейка движется вниз
s = n;
for (j = 0; j < n/2; ++j)
{
  for (i = j; i < n - 1 - j; ++i)
    mt[i][n - 1 - j] = s + i - j;
  s += (n - 1 - 2 * j) * 4 - 2;
}

// центральная клетка при нечётном n
if (n % 2 != 0)
  mt[n/2][n/2] = n * n;
88K
08 декабря 2014 года
perch.anton@gmail.com
4 / / 07.12.2014
Цитата: Roleri
Разбейте путь змейки на участки, где она движется вправо, вниз, влево и вверх, и немного посчитайте.
На первом круге каждый участок имеет длину n - 1, на каждом следующем круге становится короче на 2.
Ниже я заполнил половину таблицы :)
Код:
int s; // первое число в заполняемой строке или столбце
for (i = 0; i < n; ++i)
  memset(*(mt + i), 0, n * sizeof(int)); // когда змейкой будет заполнена вся таблица, обнуление станет ненужным

// змейка движется вправо
s = 1;
for (i = 0; i < n/2; ++i)
{
  for (j = i; j < n - 1 - i; ++j)
    mt[i][j] = s + j - i;
  s += (n - 1 - 2 * i) * 4; // увеличиваем на длину i-го круга
}

// змейка движется вниз
s = n;
for (j = 0; j < n/2; ++j)
{
  for (i = j; i < n - 1 - j; ++i)
    mt[i][n - 1 - j] = s + i - j;
  s += (n - 1 - 2 * j) * 4 - 2;
}

// центральная клетка при нечётном n
if (n % 2 != 0)
  mt[n/2][n/2] = n * n;

88K
08 декабря 2014 года
perch.anton@gmail.com
4 / / 07.12.2014
Спасиб)
88K
08 декабря 2014 года
Roleri
9 / / 02.12.2014
Пожалст)
Не забывайте о free();
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог