Pagini recente » Cod sursa (job #1424331) | Monitorul de evaluare | Istoria paginii utilizator/olorin | Istoria paginii utilizator/wildchild | Cod sursa (job #1693487)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main() {
FILE *input, *output;
int size, index, position, element;
int *stack;
bool valid, in_stack;
bool *appearance;
input = fopen("permutari.in", "r");
fscanf(input, "%d\n", &size);
fclose(input);
stack = (int*) malloc(sizeof(int) * (size));
appearance = (bool*) malloc(sizeof(int) * (size + 1));
for(index = 0; index < size; index += 1) {
stack[index] = 0;
}
output = fopen("permutari.out", "w");
position = 0;
while (position > -1) {
if (stack[position] < size) {
stack[position] += 1;
position += 1;
} else {
stack[position] = 0;
position -= 1;
}
if (position == size) {
position -= 1;
for(index = 1; index <= size; index += 1) {
appearance[index] = false;
}
valid = true;
for(index = 0; index < size; index += 1) {
element = stack[index];
in_stack = appearance[element];
if (in_stack) {
valid = false;
break;
}
appearance[element] = true;
}
if (valid) {
for(index = 0; index < size; index += 1) {
fprintf(output, "%d ", stack[index]);
}
fprintf(output, "\n");
}
}
}
fclose(output);
return 0;
}