Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 2 KB
#include <stdio.h>
#define IFile "szamjegy.be"
#define OFile "szamjegy.ki"
#define MDIG 10
#define MLEN 12
#define MNUM 11
#define MINL 256
int NDig = 0, Num = 0;
int A[MDIG];
int B[MNUM][MLEN];
int Len[MNUM];
char bNewCase;
FILE * IN, * OUT;
void Init (void);
int Exam (void);
void Print (void);
int Next (void);
int main (void) {
printf("<-- Start -->\n");
Init();
OUT = fopen(OFile, "w");
if (OUT == NULL) {
printf("Output file error.\n");
return 1;
}
if (IN == NULL) {
printf("Input file error.\n");
return 1;
}
do
if (Exam())
Print();
while (Next());
fclose(OUT);
return 0;
}
void Init (void) {
char C[MDIG];
int I, J, L;
char X;
IN = fopen(IFile, "r+b");
if (IN == NULL)
return;
fseek(IN, 0, SEEK_END);
L = ftell(IN);
Len[Num] = 0;
for (I = 0; I < MNUM; I++)
for (J = 0; J < MLEN; J++)
B[I][J] = -1;
for (I = L - 1; I >= 0; I--) {
fseek(IN, I, SEEK_SET);
fread(&X, 1, 1, IN);
if (X == '+' || X == '=') {
Num++;
Len[Num] = 0;
} else {
for (J = 0; J < NDig; J++)
if (C[J] == X)
break;
if (J == NDig)
C[NDig++] = X;
B[Num][Len[Num]++] = J;
}
}
Num++;
fclose(IN);
for (I = 0; I < MDIG; I++)
A[I] = I;
}
int Exam (void) {
int I, J, X = 0;
if (!bNewCase)
return 0;
for (I = 0; I < Num; I++)
if (A[B[I][Len[I] - 1]] == 0)
return 0;
for (I = 0; I < MLEN; I++) {
for (J = 1; J < Num; J++)
if (B[J][I] != -1)
X+= A[B[J][I]];
if (B[0][I] != -1)
if (X%10 != A[B[0][I]])
return 0;
X/= 10;
}
return 1;
}
void Print (void) {
int I, J;
for (I = Num - 1; I >= 0; I--) {
for (J = Len[I] - 1; J >= 0; J--)
fprintf(OUT, "%d", A[B[I][J]]);
if (I == 0)
fprintf(OUT, "\n");
else if (I == 1)
fprintf(OUT, "=");
else
fprintf(OUT, "+");
}
}
int Next (void) {
int X, Y, I, J, Min;
for (X = MDIG - 2; X >= 0 && A[X + 1] <= A[X]; X--);
if (X == -1)
return 0;
Y = X + 1;
Min = A[Y];
for (I = X + 2; I < MDIG; I++)
if (A[I] <= Min && A[I] > A[X]) {
Y = I;
Min = A[Y];
}
bNewCase = Y < NDig || X < NDig;
A[Y] = A[X];
A[X] = Min;
for (I = X + 1, J = MDIG - 1; I < J; I++, J--) {
Min = A[I];
A[I] = A[J];
A[J] = Min;
}
return 1;
}