Auto-vortex
From Algopedia
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;
}