заполнение матрица по спирали

Тема в разделе "C и С++ FAQ", создана пользователем phoebe, 25 ноя 2009.

  1. phoebe

    phoebe Гость

    всем привет!
    вот тут такая задача (язык Си): заполнить матрицу последовательностью чисел кратных 3 в таком порядке:

    10 9 8 7
    11 16 15 6
    12 13 14 5
    1 2 3 4

    (надо в динам. памяти) форм. массив)

    у меня получилось написать ,собственно, очень мало - только заполнение числами, кратными 3 одномерного массива и двухмерного, но только в правильном порядке. а по спирали не выходит(( я уже так давно мучаюсь с ней, буду очень благодарна, если мне кто-то поможет с этим циклом (тот, что расставляет и выводит по спирали)... :(
    или подскажите, кто уже с этим сталкивался, хотя бы алгоритм...
    вот мой код:

    Код (C++):
         # include<conio.h>
    # include <stdio.h>
    # include <math.h>
    #include <malloc.h>
    # include <stdlib.h>
    # define m 16
    # define n 4

    void main()
    {
    clrscr();
    int i, j, t, p, k, ar[m], *ptr, br[n][n], *pt, *ptt, cr[n][n];
    ptt=&ar[0];
    pt=&br[0][0];
    ptr=&cr[0][0];

    //Odnomerniy massiv


    for( i=0; i<m; i++)
    { *(ptt+i)=i*3+3;
    printf("a[%d]=%d\n",i, *(ptt+i));}
    printf("\n\n");


    // Dvuhmerniy massiv

    for(j=0; j<n; j++)
    {
    for(t=0; t<n; t++)
    {
    *(pt+j*n+t)=(j*n+t)*3+3;
    printf(" b[%d][%d]=%d", j, t, br[j][t]);
    }
    printf("\n");
    }
    printf("\n\n");




    //Dvuhmerniy massiv po spirali

    p=n/2;



    for(p=0; p<(n/2-1); p++)
    {

    for(j=p; j<n-p-1; j++)
    {
    *(ptr+(n-p-1)*n+j)=((n-p-1)*n+j)*3+3;
    printf(" c[%d][%d]=%d ", n-p-1, j, cr[n-p-1][j]);



    }
    printf("\n");

    for (i=n-p-1; i>p+1; --i)
    {
    *(ptr+i*n+(n-p-1))=(i*n+(n-p-1))*3+3;
    printf(" c[%d][%d]=%d", i, n-p-1, cr[i][n-p-1]);
    }
    printf("\n");

    for(j=n-p-1; j>p+1; j--)
    {
    *(ptr+p*n+j)=(p*n+j)*3+3;
    printf(" c[%d][%d]=%d", p, j, cr[p][j]);
    }
    printf("\n");

    for (i=p; i<n-p-1; i++)
    {
    *(ptr+i*n+p)=(i*n+p)*3+3;
    printf(" c[%d][%d]=%d", i, p, cr[i][p]);
    }
    printf("\n");


    }
    if (n%2==1)
    {
    *(ptr+(n/2+1)*n+n/2+1)=((n/2+1)*n+n/2+1)*3+3;
    printf(" %d ", *(ptr+(n/2+1)*n+n/2+1);
    }

    }
    getch();
    <table valign="top" style='margin:0;width:100%;border:1px dashed red;'>[tr]<td align='middle' bgcolor='#ff6060' valign='top' width='1%'>
    <FONT color='#ffffff' size='+3'> ! </font>
    </td><td align="midle" valign='top' style='background:#fff;'>Испоьзуем теги кода!</td>[/tr]</table>
     
Загрузка...

Поделиться этой страницей