Well, se pare ca timpul a expirat.
Th3 P!mp nu a trimis sursa la ce a lucrat.
Programul afiseaza rezultate corecte pentru cazurile n = 2, 3, 4
Sursa lui nytr0gen:
#include <fstream>
#include <string>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
int main() {
int N;
string p[21];
int d[21][21];
ifstream fin("sah.in");
fin >> N;
if(N < 1 || 20 < N) return 0;
for(int i = 1; i <= N; i++) {
if(!fin.eof()) fin >> p[i];
if(p[i] == "") {
p[i] = "jucatorul";
if(i < 10) { p[i] += i+'0'; }
else { p[i] += i/10+'0'; p[i] += i%10+'0';}
}
}
for(int l = 1; l <= N; l++)
for(int c = 1; c <= N; c++)
d[l][c] = 0;
for(int l = 2; l <= N; l++) {
for(int c = 1, x = l-1; c < l; c++, x++) {
if(x > N) x = 1;
d[l][c] = x;
}
}
ofstream fout("sah.out");
for(int i = 1; i <= N; i++) {
fout << "Ziua " << i << ": ";
for(int j = 1; j <= N; j++)
for(int x = 1; x < j; x++)
if(d[j][x] == i)
fout << p[min(x,j)] << " cu " << p[max(x,j)] << "; ";
fout << "\n";
}
fout.close();
fin.close();
return 0;
}
Functioneaza corect, dar nu optim pentru numar par de jucatori
Daca doriti sa vedeti si sursa mea:
Program C30;
var
sah_in,sah_out:text;
n,nz:word;
jucator:array[1..20] of string;
zile:array[1..20] of record
p:byte; {partide =0 pentru inceput}
joc:array[1..10] of record j1,j2:byte end;
end;
Procedure Die(s:string);
begin
writeln(s);
writeln('Press Enter...');
readln;
halt;
end;
Procedure Init;
var i:word;
nume:string;
begin
assign(sah_in,'sah.in');
{$i-} reset(sah_in); {$i+}
if ioresult<>0 then Die('Nu am gasit fisierul SAH.IN');
readln(sah_in,n);
if (n<2) or (n>20) then Die('Numarul de jucatori trebuie sa fie intre 2 si 20');
for i:=1 to n do begin
str(i,nume); nume:='Jucator'+nume;
if not eof(sah_in) then readln(sah_in,nume);
jucator[i]:=nume;
end;
close(sah_in);
for i:=1 to 20 do zile[i].p:=0;
end;
Procedure Run;
var i,j,z:word;
begin
nz:=n;
if not odd(n) then dec(nz);
for i:=1 to nz do for j:=i to nz do begin
z:=(i+j-2) mod nz; if z=0 then z:=nz;
if(i<>j) then begin
inc(zile[z].p);
zile[z].joc[zile[z].p].j1:=i;
zile[z].joc[zile[z].p].j2:=j;
end else
if (i=j) and (nz<n) then begin
inc(zile[z].p);
zile[z].joc[zile[z].p].j1:=i;
zile[z].joc[zile[z].p].j2:=n;
end;
end;
end;
Procedure Done;
var z,p:word;
begin
assign(sah_out,'sah.out');
rewrite(sah_out);
for z:=1 to nz do begin
write(sah_out,'Ziua',z,': ');
for p:=1 to zile[z].p do begin
write(sah_out,Jucator[zile[z].joc[p].j1], ' cu ', Jucator[zile[z].joc[p].j2], '; ');
end;
writeln(sah_out);
end;
close(sah_out);
end;
begin
Init;
Run;
Done;
end.