Auto-vortex

From Algopedia
Revision as of 11:31, 19 June 2013 by Cristian (talk | contribs) (Created page with "<pre>→‎Nume program : auto-vortex.c Nume concurent : Ulmeanu Vlad , Matei Lascu: #include<stdio.h> #include<stdlib.h> #include<time.h> /* Strategia jocului consta in...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
/*
   Nume program   : auto-vortex.c
   Nume concurent : Ulmeanu Vlad , Matei Lascu
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

/*

Strategia jocului consta in determinarea paritatii, astfel:
- o stare numita 'para' este cea in care toate puterile lui 2
din reprezentarea jocului apar de un nr. par de ori in toate stivele;
acesta este echivalent cu S1 XOR S2 XOR .. XOR Sn = 0;
- orice stare care nu este 'para' este numita 'impara'.

La fiecare pas (mutare) se testeaza paritatea.
Strategia se bazeaza pe urmatoarele doua teoreme:
T1- dintr-o stare impara se poate ajunge intr-o stare para printr-o
mutare convenabila, conform strategiei ;
T2 - dintr-o stare para se poate ajunge intr-o stare impara prin orice fel
de mutare (random);

# Nu stiu daca se incadreaza in timp/mutare si memorie.
*/

int v[30];

int main()
{
    srand(time(NULL));

    int i=0,j,exor,m,rz,x,l=0,p,a;
    char c;

    do
    {
        fscanf(stdin,"%d",&v[i]);
        c=fgetc(stdin);
        i++;
    }while(c==' ');

    m=i;

    exor=v[0]^v[1];

    for(j=2; j<i; j++)
        exor=exor^v[j];

    if(exor!=0)
    {
        x=0;
        rz=v[x]^exor;
        while(rz>=v[x])
        {
            x++;
            rz=v[x]^exor;
        }
        v[x]=rz;
    }
    else
    {
        x=0;
        while(v[x]==0)
            x++;
        p=v[x];
        v[x]=rand()%p;
    }

    for(j=0; j<m; j++)
    {
       fprintf(stdout,"%d",v[j]);
       if(j!=m-1)
            fprintf(stdout," ");
    }

    fprintf(stdout,"\n");

    return 0;
}