Cod sursa(job #1655178)

Utilizator TonisonIlle Antoniu Nicolae Tonison Data 17 martie 2016 20:13:43
Problema Cifre Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <iostream>
#include <fstream>

using namespace std;

int a[100][100]={};
int l,n,x;

void bordura()
{
    for(int i=0; i<=n+1; ++i)
        a[i][0]=-1;
    for(int j=0; j<=n; ++j)
        a[0][j]=-1;
    for(int i=0; i<=n+1; ++i)
        a[i][n+1]=-1;
    for(int j=0; j<=n; ++j)
        a[n+1][j]=-1;
    for(int i=1; i<=n; ++i)
    {
        for(int j=1; j<n; ++j)
        {
            a[i][j]=0;
        }
    }
}

void lr(int &i, int &j, int s)
{
    while(a[i][j]==0)
    {
        a[i][j]=x;
        x+=s;
        ++j;
    }
    --j,++i;
}

void rl(int &i, int &j, int s)
{
    while(a[i][j]==0)
    {
        a[i][j]=x;
        x+=s;
        --j;
    }
    ++j,--i;
}

void ud(int &i, int &j, int s)
{
    while(a[i][j]==0)
    {
        a[i][j]=x;
        x+=s;
        ++i;
    }
    --i,--j;
}

void du(int &i, int &j, int s)
{
    while(a[i][j]==0)
    {
        a[i][j]=x;
        x+=s;
        --i;
    }
    ++i,++j;
}

void spirala(int i, int j, int s)
{
    lr(i,j,s);
    ud(i,j,s);
    rl(i,j,s);
    du(i,j,s);
}

void afisare()
{
    for(int i=0; i<=n+1; i++)
    {
        for(int j=0; j<=n+1; j++)
        {
            cout<<a[i][j]<<"    ";
        }
        cout<<"\n\n\n";
    }
}


int main()
{
    cin>>n;
    int i,j;
    bordura();
    l=n*n;
    x=1,i=1,j=1;

    for(int k=1; k<=n; k++)
    {
        if(k%2==1)
        {
            i=1,j=1;
            //while(x<l)
                //{spirala(i,j,1),cout<<1;}
            afisare(); cout<<"\n\n";
            bordura();

        }
        else
        {
            i=1,j=1;
            x=x+n*n-1;
            while(x>l)
                spirala(i,j,-1);
            l+=(n*n);
            x++;
            afisare(); cout<<"\n\n";
            bordura();
        }
    }

    return 0;
}