Cod sursa(job #1455374)

Utilizator vcalinCalin Velea vcalin Data 27 iunie 2015 20:25:17
Problema Tablete Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<stdio.h>

int n,k;
int matrix[1001][1001];

// n e par
void genpar(int n, int k)
{
	int i,j;
	int ss,dj;

	for (i=0;i<n;i+=2) {
		for(j=0;j<n;j++) {
			matrix[i][j] = i * n + j;
			matrix[i][j]++;
		}
		for(j=0;j<n;j++) {
			matrix[i+1][j] = (i+1) * n + j;
			matrix[i+1][j]++;
		}

		// daca k=par, e ok cum e
		if(k % 2 == 0)
			continue;

		ss = matrix[i][0];
		dj = matrix[i+1][n-1];

		for (j=0;j<n-1;j++) 
			matrix[i][j] = matrix[i][j+1];
		for (j=n;j>=1;j--) 
			matrix[i+1][j] = matrix[i+1][j-1];

		matrix[i][n-1] = dj;
		matrix[i+1][0] = ss;
	}
}


// Genereaza n-1 unde n e par
void genimpar(int n, int k)
{
	int j;
	genpar(n - 1, k);

	int p = (n-1)*(n-1);

	if(k % 2 == 0) {
		for(j=0;j<n;j++)
			matrix[n-1][j] = ++p;
		for(j=0;j<n-1;j++)
			matrix[j][n-1] = ++p;
	} else {
		p++;
		for(j=0;j<n;j++)
			matrix[n-1][j] = ++p;
		for(j=0;j<n-1;j++)
			matrix[j][n-1] = ++p;		
	}
	matrix[n-2][n-1] = (n-1)*(n-1) + 1;
}

int main(int argc, char const *argv[])
{
	FILE *in = fopen("tablete.in", "r");
	FILE *out = fopen("tablete.out", "w");
	fscanf(in, "%d %d", &n, &k);

	int i,j;


	if(n % 2 == 0)
		genpar(n, k);
	else genimpar(n, k);

	for (i=0;i<n;i++) {
		for(j=0;j<n;j++) {
			fprintf(out, "%3d ",matrix[i][j]);
		}
		fprintf(out, "\n");
	}


	return 0;
}