Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2014, 13:33   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Си, задача матрешка

Ребят, помогайте, сижу на зачете, пытаюсь что-то написать, выручайте
Создать квадратную матрицу-матрешку. Каждый слой вычисляется по формуле. Слои нумеруются от центра к краю. Вот формула Аj=j*j+1/j*j*j+1;

Т.е. Центр-право-низ-лево-верх-центр...

Вот пример


3 3 3 3 3
3 2 2 2 3
3 2 1 2 3
3 2 2 2 3
3 3 3 3 3

Код:
#include <stdio.h>

int main() {
    int n;

    printf("Print razmer,and Press Enter:..");
    scanf("%d",&n);

    float a1[n][n];
    if (n<=2)
      return 0;

    int i = 1, j, q, cnt;
    int r, c;
    int d = 0;
    r = c = n / 2;
    a1[ r ][ c ] = i++;
      for (cnt = 1; cnt <= n; ++cnt)
    {
        for (q = 0; q < 2; ++q)
        {
            for (j = 0; j < cnt && i <= (n * n); ++j)
            {
                switch (d)
                {

                case 0: ++c; break;//верх
                case 1: ++r; break;//лево
                case 2: --c; break;//низ
                case 3: --r; break;//право

                }

 a1[ r ][ c ] =((j*j)+1)/((j*j*j)+1);
            }

            if (++d > 3) d = 0;
        }

    }

    for (i=0;i<n;i++)
    {

        for (j=0;j<n;j++)
        {
            printf("%d\t",a1[i][j]);
        }
        printf("\n");
    }
    return 0;
}
from dark to light)

Последний раз редактировалось Алексей_2012; 24.12.2014 в 13:40.
Алексей_2012 вне форума Ответить с цитированием
Старый 24.12.2014, 14:00   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А вот если вместо строки
Код:
 a1[ r ][ c ] =((j*j)+1)/((j*j*j)+1);
поставить
a1[ r ][ c ] =i++;
то заполняется змейкой от 1 до 25, а надо чтоб была симметрия
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.12.2014, 15:15   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, есть какие-нибудь идеи?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.12.2014, 15:22   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

j*j+1/j*j*j+1 и ((j*j)+1)/((j*j*j)+1)
это совершенно разные формулы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.12.2014, 16:50   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, взял другой билет, в общем поздравьте меня, я сдал!) Но все равно интересно: как же она решается?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.12.2014, 17:36   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А примерно так:
Код:
// 444.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
	const int n=10;
	int i,j,a[n][n]={0},k;
	k=n/2+1;
	for(i=0;i<n/2;i++){
		for(j=i;j<n/2;j++){
			a[i][j]=
				a[j][i]=
				a[n-j-1][i]=
				a[i][n-j-1]=
				a[j][n-i-1]=
				a[n-i-1][j]=
				a[n-i-1][n-j-1]=
				a[n-j-1][n-i-1]=
			k;
		}
		k--;
	}

	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			printf("%6d",a[i][j]);
		}
		printf("\n");
	}
	getchar();
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.12.2014, 17:48   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
  k1:=n div 2;
  k2:=k1+1;
  if k1*2<n then k1:=k2;
  for i:=1 to n do
    for j:=1 to n do
      a[i-1,j-1]:=Max(Min(Abs(i-k1),Abs(i-k2)),Min(Abs(j-k1),Abs(j-k2)))+1;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.12.2014, 17:58   #8
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Поздравляю

и как подарок немножко быдло-кода:
Код:
#include <stdio.h>

int main() {
	int n;

	printf("Print razmer,and Press Enter:..");
	scanf("%d",&n);

	int **a1;
	a1 = new int*[n];
	a1[0] = new int[n*n];
	memset(a1[0], 0, n*n*sizeof(int));
	for (int i = 0; i < n ; i++)
	{ 
		a1[i] = a1[0] + i*n;
	}
	if (n<=2)
		return 0;

	int i = 1, j, q, cnt;
	int r, c;
	int d = 0;
	r = c = n / 2;
	a1[ r ][ c ] = i++;

	int bdr = n/2 + n%2;

	// заполняем верхний треугольник
	for (int y = 0; y < n/2 ; y++)
	{
		for (int x = y; x < n - y ; x++)
		{
			a1[y][x] = bdr - y;
		}
	}

	// копируем вниз

	for (int y = 0; y < n/2 ; y++)
	{
		for (int x = 0; x < n ; x++)
		{
			a1[n-y - 1][x] = a1[y][x];
		}
	}

	// поворачиваем, с тестом на незаполненность ячейки

	for (int y = 0; y < n ; y++)
	{
		for (int x = 0; x < n ; x++)
		{
			if (!a1[y ][x])
			{
				a1[y][x] = a1[x][y];
			}		
		}
	}

	for (i=0;i<n;i++)
	{

		for (j=0;j<n;j++)
		{
			printf("%d ",a1[i][j]);
		}
		printf("\n");
	}
	return 0;
}
Smogg вне форума Ответить с цитированием
Старый 14.01.2015, 12:52   #9
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А если формула a[j]=j+1/2*j?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
Матрешка из ЕСЛИ >7 Trimbl Microsoft Office Excel 9 03.12.2012 13:19
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51