Problema:

Scrieti un program care sa genereze un tablou bidimensional cu proprietatile:

-contine N linii si N coloane;

-elementele sale sunt numere naturale nenule;

-suma elementelor este egala cu numarul natural nenul S;

-pe nici o linie si nici o coloana nu exista 2 elemente identice;

-diferenta dintre cel mai mare si cel mai mic element al tabloului este minima.

Programul va citi de la tastatura numerele naturale nenule N si S si va afisa pe ecran tabloul generat

(ONI, Bacau, 2001, clasa a IX-a)

Rezolvare:

#include<iostream.h>

void main()

{long n, S, a, Sp, i, j ,cd,,rd,d;

cout<<"n,S="; cin>>n>>S;

a= (S/n-n*(n-1)/2)/n;

if(a>0) cout<<0;

else

{ Sp=n*n*a+n*(n-1)/2);

cd=(S-Sp)/n;//nr. de diagonale actualizate integral

rd=(S-Sp)%n;//nr. de elemente de actualizat de pe diagonala cd+1

for(i=1;i<=n;i+)

{d=(n+j-i)%n+1; //diagonala elementului i,j

if(((d>n-cd)||(d=n-cd)&&(j<=rd))

cout<<a+d<<' ';

else cout<<a+d-1<<' ';}

cout<<endl;}

}

}