История изменений
Исправление Lrrr, (текущая версия) :
ладно. 25 строк на сишке, как заказывали
#include <stdint.h>
#include <stdio.h>
int main() {
int bits[9];
for (int mask = 0; mask < 19683; ++mask) {
int64_t total = 9, cs = 9;
for (int i = 8, cur = mask; i >= 0; --i, cur /= 3) {
bits[i] = cur % 3;
if (bits[i] == 2) { // 56
total -= cs;
cs = cs * 10 + i * ((cs >> 63) * 2 + 1);
} else // 5 +- 6
cs = i * (1 - bits[i] * 2);
total += cs;
}
const char sign[] = "+-\0";
if (total == 200) {
printf("9");
for (int i = 8; i >= 0; --i)
printf("%c%d", sign[bits[i]], i);
puts("");
}
}
}
$ gcc main.c && ./a.out | tr -d '\0' | bc -i | tail
98-7+65+43+2-1+0
200
98-7+65+43+2-1-0
200
98+76-5+43-2-10
200
9-8-7-6-5+4+3+210
200
9-8+7-6-5-4-3+210
200
Исправление Lrrr, :
ладно. 25 строк на сишке, как заказывали
#include <stdint.h>
#include <stdio.h>
int main() {
int bits[9];
for (int mask = 0; mask < 19683; ++mask) {
int64_t total = 9, cs = 9;
for (int i = 8, cur = mask, bit; i >= 0; --i, cur /= 3) {
bits[i] = bit = cur % 3;
if (bit == 2) { // 56
total -= cs;
cs = cs * 10 + i * ((cs >> 63) * 2 + 1);
} else // 5 +- 6
cs = i * (1 - bit * 2);
total += cs;
}
const char sign[] = "+-\0";
if (total == 200) {
printf("9");
for (int i = 8; i >= 0; --i)
printf("%c%d", sign[bits[i]], i);
puts("");
}
}
}
$ gcc main.c && ./a.out | tr -d '\0' | bc -i | tail
98-7+65+43+2-1+0
200
98-7+65+43+2-1-0
200
98+76-5+43-2-10
200
9-8-7-6-5+4+3+210
200
9-8+7-6-5-4-3+210
200
Исходная версия Lrrr, :
ладно. 25 строк на сишке, как заказывали
#include <stdint.h>
#include <stdio.h>
int main() {
int bits[9];
for (int mask = 0; mask < 19683; ++mask) {
int64_t total = 9, cs = 9;
for (int i = 8, cur = mask, bit; i >= 0; --i, cur /= 3) {
bits[9 - i - 1] = bit = cur % 3;
if (bit == 2) { // 56
total -= cs;
cs = cs * 10 + i * ((cs >> 63) * 2 + 1);
} else // 5 +- 6
cs = i * (1 - bit * 2);
total += cs;
}
const char sign[] = "+-\0";
if (total == 200) {
printf("9");
for (int i = 8; i >= 0; --i)
printf("%c%d", sign[bits[9 - i - 1]], i);
puts("");
}
}
}
$ gcc main.c && ./a.out | tr -d '\0' | bc -i | tail
98-7+65+43+2-1+0
200
98-7+65+43+2-1-0
200
98+76-5+43-2-10
200
9-8-7-6-5+4+3+210
200
9-8+7-6-5-4-3+210
200