Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Запълване на масив

Featured Replies

Привет :) От доста време се ровя из интернет и разни книги и не мога да си реша проблема с една програма за запълване на двумерен целочислен масив . Условието е следното : " Да се състави програма за запълване на двумерен целочислен масив А[N,N] с естествените числа започвайки от 1 до NxN (N на квадрат ) с начало горния десен ъгъл на масива и запълването да става по диагонали , успоредни на главния диагонал " 

Мисля че трябва да се получи следното : 

Например при N = 5 , масивът трябва да се запълни с числата от 1 до 25 

  11 , 7 , 4 , 2 , 1 

  16 ,12  8 , 5, 3

  20 ,17,13,9, 6 

  23,21,18,14,10

  25,24,22,19,15

Нещото за което опитвам да се хвана е , че за всеки диагонал успореден на главния , ако приемем числата за А[j]  , разликата j-i е еднаква и намалява от n до -n 

например диагонала 4,5,6 има индекси съответно [0][2] , [1][3]  и [2][4] , където разликата j-i винаги е равна на 2 . 

При обхождане на главния диагонал разликата е равна на 0 .  

И така в горния десен ъгъл (А[0][4]) разликата е 4 и намалява до 0 при главния диагонал . 

След  това тази разлика намалява до -4 под главния диагонал . 

Това е моята логика с която за сега нищо не се получава и може би е доста грешна , но не се сещам за нещо друго . 

Ще съм много благодарен на малко помощ от вас :)

Поздрави :):) 

Интересна задачка :). Ако имаш някакъв код моля те сподели го, за да ти дадем насоки къде какво да пипнеш, а ако нямаш драсни някой друг ред и да работим по него.

#include <stdio.h>

int main() {
    const int n=6;
    int a[n][n];
    int i,j=0;
    
    int c=n-1;
    int r=0;
    
    do {
        for (i=0; i+r+c<n; ++i)
            a[r+i][c+i]=++j;
        if (c) --c;
        else ++r;
    } while (r<n);
    
    for (i=0; i<n; ++i) {
        for (j=0; j<n; ++j)
            printf("%5d",a[i][j]);
        printf("\n\n");
    }
}

 

Редактирано от ined (преглед на промените)

  • Автор
преди 5 часа, ined написа:

#include <stdio.h>

int main() {
    const int n=6;
    int a[n][n];
    int i,j=0;
    
    int c=n-1;
    int r=0;
    
    do {
        for (i=0; i+r+c<n; ++i)
            a[r+i][c+i]=++j;
        if (c) --c;
        else ++r;
    } while (r<n);
    
    for (i=0; i<n; ++i) {
        for (j=0; j<n; ++j)
            printf("%5d",a[i][j]);
        printf("\n\n");
    }
}

 

Благодаря за бързия отговор :) Ще прегледам кода и ще се опитам да го осмисля кой ред какво прави . Ако нещо не ми е ясно ще ти пиша на ЛС :) 

Ето ти още един начин:

#include <stdio.h>

int main(int argc, const char *argv[]) {
	const int N = 5;
	int i, j, arr[N][N];
	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++) {
			int diagonal = i + (N - 1 - j);
			int number = (1 + diagonal) * diagonal / 2 + i + 1;
			if (diagonal >= N) {
				int overflow = diagonal - N + 1;
				number -= (1 + overflow) * overflow / 2;
				number -= overflow * (overflow - 1) / 2;
			}
			arr[i][j] = number;
			printf("%3d", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

 

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.