Pagini recente » Cod sursa (job #2758207) | Cod sursa (job #2089717) | Cod sursa (job #3246938) | Cod sursa (job #87528) | Cod sursa (job #236342)
Cod sursa(job #236342)
#include<stdio.h>
#define infile "tablete.in"
#define outfile "tablete.out"
#define nmax 1001
int m[nmax][nmax]; //matricea in care construim
int n,k; //numarul de linii/coloane, si numarul coloanei care trebuie sa aiba elementele pare
int x=0; //variabila care retine ultimul numar afisat in matrice
//functia care face matricea daca k este par
//aceasta functie pune elementele la rand pornind din coltul din stanga sus (1,1 -> nk), partea stanga a matricei
void k_par(int m[nmax][nmax], int n, int k, int *x)
{
int i,j;
for(i=1;i<=n;i++) //fiecare linie
for(j=1;j<=k;j++) //fiecare coloana pana la k
m[i][j]=*x+=1; //ultimul numar afisat in matrice (plus 1)
}
//functia care face matricea daca k este impar
//aceasta functie pune elementele pe rand din coltul stanga sus, avand grije ca pe coloana k sa punem numar par
void k_impar(int m[nmax][nmax], int n, int k, int *x)
{
int i,j;
for(i=1;i<=n;i++) //fiecare linie
for(j=1;j<=k;j++) //fiecare coloana
if(j==1 && !(i%2)) //prima coloana de pe o linie para
m[i][j]=*x-1; //afisem numarul cu 1 mai mic decat ultimul afisat in ultima coloana de pe linia anterioara
else if(j==k && i%2) //ultima coloana de pe o linie impara
m[i][j]=*x+=2; //afisem x+2 deoarece avem nevoie de un numar par. dupa vom afisa x-1 (primul elemeent de pe linia urmatoare)
else m[i][j]=*x+=1; //
}
//functia care umple cu restul numerelor ramase partea din dreapta lui k
void umplere(int m[nmax][nmax], int n, int k, int *x)
{
int i,j;
for(i=1;i<=n;i++) //fiecare linie
for(j=k+1;j<=n;j++) //coloanele din dreapta lui k
m[i][j]=*x+=1; //unltimul numar afisat (+1)
}
void afisare(int m[nmax][nmax], int n)
{
int i,j;
for(i=1;i<=n;printf("\n"),i++)
for(j=1;j<=n;printf("%d ",m[i][j++]));
}
int main()
{
//deschidem fisiere
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
scanf("%d %d",&n,&k); //citim cele 2 variabile (numarul de linii/coloane si numarul coloanei ce trebuie sa aiba toate elementele pare)
if(!(k%2)) k_par(m,n,k,&x); //daca k par
else k_impar(m,n,k,&x); //k impar
umplere(m,n,k,&x); //umplem coloanele din dreapta lui k cu numerele ramase
afisare(m,n); //afisem matricea
fclose(stdin);
fclose(stdout);
return 0;
}