#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM 8192 * 4
void add (int a [10][20], int row, int val);
void print_abacus (int a [10][20]) {
int i, j;
printf ("==========================\n\n");
for (i = 0; i < 10; i++) {
for (j = 0; j < 20; j++) {
if (a [i][j] == 1)
printf ("x");
else
printf ("_");
}
printf ("\n");
}
printf ("==========================\n\n");
}
int main(void) {
int x, y;
int ch [10];
time_t t;
int i, j;
int a [10][20];
int r, q;
srand ((unsigned) time (&t));
for (i = 0, y = 0; i < 10; i++) {
printf ("%i + ", x = ((rand () % MAX_NUM) + 1));
ch [i] = x;
y += x;
}
printf (" = %i\n", y);
ch [0] = 22001;
ch [1] = 32685;
ch [2] = 26329;
ch [3] = 16961;
ch [4] = 23777;
ch [5] = 30269;
ch [6] = 6469;
ch [7] = 8953;
ch [8] = 12669;
ch [9] = 7565;
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
a [i] [j] = 1;
}
for (; j < 20; j++)
a [i] [j] = 0;
}
print_abacus (a);
for (i = 0; i < 10; i++) {
r = 10000;
for (j = 0; j < 5; j++) {
x = (ch [i] / (r)) % 10;
printf ("%i ", x);
r = r / 10;
add (a, (5-j), x);
print_abacus (a);
}
printf ("\n");
}
}
void add (int a [10][20], int row, int val) {
int limit1;
int limit2;
int j, k, l, i;
for (limit2 = 19, limit1 = 0; limit2 > 0; limit2--, limit1 ++)
if (a [row][limit2] == 0)
break;
if (limit1 == 10) {
for (limit1 = 0, limit2 = 19; limit1 < 10; limit1++, limit2--) {
a [row][limit1] = 1;
a [row][limit2] = 0;
}
add (a, row - 1, 1);
}
printf ("%i\n", val);
for (j = 19; j > 0; j--)
if (a [row][j] == 0) {
limit2 = j+1;
break;
}
for (limit1 = 0; limit1 < 10; limit1++) {
if (a [row][limit1] == 0)
break;
}
if (val > limit1) {
add (a, row - 1, 1);
for (k = limit1, l = limit2, i = 0; i <= (10 - val); i++, k--, l--) {
a [row][k] = 0;
a [row][l] = 1;
}
}
else {
for (k = limit1, l = limit2, i = 0; i <= val; i++, k--, l--) {
a [row][k] = 0;
a [row][l] = 1;
}
}
print_abacus (a);
//getchar ();
}