Cod sursa(job #1999878)

Utilizator rosudavidgRosu David Gabriel rosudavidg Data 12 iulie 2017 12:28:06
Problema Fractii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#include <stdlib.h>

void readData(int *N, FILE *in)
{
	fscanf(in, "%d", &(*N));
	return ;
}

int equal(int up1, int down1, int up2, int down2)
{
	int r1, r2, q1, q2;

	q1 = up2   / up1;
	q2 = down2 / down1;

	r1 = up2   % up1;
	r2 = down2 % down1;

	if(r1 == 0 && r2 == 0 && q1 == q2)
		return 1;
	else
		return 0;
}

void getAns(int *ans, int N)
{
	int *up   = (int*) malloc(sizeof(int)),
		*down = (int*) malloc(sizeof(int));

	*ans    = 1;
	up[0]   = 1;
	down[0] = 1;

	for(int i = 1; i <= N; ++i)
		for(int j = 1; j <= N; ++j)
		{
			int ok = 1;
			for(int k = 0; k < *ans; ++k)
				if(equal(up[k], down[k], i, j) == 1)
				{
					ok = 0;
					break;
				}

			if(ok == 1)
			{
				++(*ans);
				up   = (int*) realloc(up,   sizeof(int) * (*ans));
				down = (int*) realloc(down, sizeof(int) * (*ans));
				up[(*ans) - 1]   = i;
				down[(*ans) - 1] = j;
			}
		}

	free(up);
	free(down);
	return ;
}

void printAns(int ans, FILE *out)
{
	fprintf(out, "%d", ans);
	return ;
}

int main()
{
	FILE 	*in  = fopen("fractii.in", "rt"),
			*out = fopen("fractii.out", "wt");

	int N, ans;
	readData(&N, in);
	getAns(&ans, N);
	printAns(ans, out);

	fclose(in);
	fclose(out);
	return 0;
}