// 1. Library
#include <stdio.h>
// 2. Definitions
// (None needed for this problem)
// 3. Prototypes
void getInput(int *n);
int validateInput(int n);
void solveNuggets(int n);
void printSolution(int boxes6, int boxes9, int boxes20);
void printImpossible(int n);
int findClosestPossible(int n);
// 4. Main
int main() {
// 4.1 Variable declarations
int n;
// 4.2 Calls to functions
while (1) {
getInput(&n);
if (validateInput(n)) {
solveNuggets(n);
break;
}
}
return 0;
}
// 5. Functions
void getInput(int *n) {
printf("Sisesta nuggetite arv (N): ");
scanf("%d", n);
}
int validateInput(int n) {
if (n <= 0) {
printf("Palun sisesta positiivne arv.\n");
return 0; // Return 0 (false) for invalid input
}
return 1; // Return 1 (true) for valid input
}
void solveNuggets(int n) {
int boxes6, boxes9, boxes20;
int foundSolution = 0;
for (boxes20 = n / 20; boxes20 >= 0; boxes20--) {
for (boxes9 = (n - boxes20 * 20) / 9; boxes9 >= 0; boxes9--) {
boxes6 = (n - boxes20 * 20 - boxes9 * 9) / 6;
if (boxes6 * 6 + boxes9 * 9 + boxes20 * 20 == n) {
foundSolution = 1;
printSolution(boxes6, boxes9, boxes20);
return;
}
}
}
if (!foundSolution) {
int closest = findClosestPossible(n);
printf("Unfortunately, we cannot give %d nuggets, however we can offer you %d:\n", n, closest);
solveNuggets(closest);
}
}
void printSolution(int boxes6, int boxes9, int boxes20) {
printf("6x Box: %d\n9x Box: %d\n20x Box: %d\n", boxes6, boxes9, boxes20);
}
void printImpossible(int n) {
printf("Ei ole võimalik anda %d tükki.\n", n);
}
int findClosestPossible(int n) {
int closest = n + 1;
while (1) {
int boxes6, boxes9, boxes20;
for (boxes20 = closest / 20; boxes20 >= 0; boxes20--) {
for (boxes9 = (closest - boxes20 * 20) / 9; boxes9 >= 0; boxes9--) {
boxes6 = (closest - boxes20 * 20 - boxes9 * 9) / 6;
if (boxes6 * 6 + boxes9 * 9 + boxes20 * 20 == closest) {
return closest;
}
}
}
closest++;
}
}
Ly8gMS4gTGlicmFyeQojaW5jbHVkZSA8c3RkaW8uaD4KCi8vIDIuIERlZmluaXRpb25zCi8vIChOb25lIG5lZWRlZCBmb3IgdGhpcyBwcm9ibGVtKQoKLy8gMy4gUHJvdG90eXBlcwp2b2lkIGdldElucHV0KGludCAqbik7CmludCB2YWxpZGF0ZUlucHV0KGludCBuKTsKdm9pZCBzb2x2ZU51Z2dldHMoaW50IG4pOwp2b2lkIHByaW50U29sdXRpb24oaW50IGJveGVzNiwgaW50IGJveGVzOSwgaW50IGJveGVzMjApOwp2b2lkIHByaW50SW1wb3NzaWJsZShpbnQgbik7CmludCBmaW5kQ2xvc2VzdFBvc3NpYmxlKGludCBuKTsKCi8vIDQuIE1haW4KaW50IG1haW4oKSB7CiAgICAvLyA0LjEgVmFyaWFibGUgZGVjbGFyYXRpb25zCiAgICBpbnQgbjsKCiAgICAvLyA0LjIgQ2FsbHMgdG8gZnVuY3Rpb25zCiAgICB3aGlsZSAoMSkgewogICAgICAgIGdldElucHV0KCZuKTsKICAgICAgICBpZiAodmFsaWRhdGVJbnB1dChuKSkgewogICAgICAgICAgICBzb2x2ZU51Z2dldHMobik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9CgovLyA1LiBGdW5jdGlvbnMKdm9pZCBnZXRJbnB1dChpbnQgKm4pIHsKICAgIHByaW50ZigiU2lzZXN0YSBudWdnZXRpdGUgYXJ2IChOKTogIik7CiAgICBzY2FuZigiJWQiLCBuKTsKfQoKaW50IHZhbGlkYXRlSW5wdXQoaW50IG4pIHsKICAgIGlmIChuIDw9IDApIHsKICAgICAgICBwcmludGYoIlBhbHVuIHNpc2VzdGEgcG9zaXRpaXZuZSBhcnYuXG4iKTsKICAgICAgICByZXR1cm4gMDsgLy8gUmV0dXJuIDAgKGZhbHNlKSBmb3IgaW52YWxpZCBpbnB1dAogICAgfQogICAgcmV0dXJuIDE7IC8vIFJldHVybiAxICh0cnVlKSBmb3IgdmFsaWQgaW5wdXQKfQoKdm9pZCBzb2x2ZU51Z2dldHMoaW50IG4pIHsKICAgIGludCBib3hlczYsIGJveGVzOSwgYm94ZXMyMDsKICAgIGludCBmb3VuZFNvbHV0aW9uID0gMDsKCiAgICBmb3IgKGJveGVzMjAgPSBuIC8gMjA7IGJveGVzMjAgPj0gMDsgYm94ZXMyMC0tKSB7CiAgICAgICAgZm9yIChib3hlczkgPSAobiAtIGJveGVzMjAgKiAyMCkgLyA5OyBib3hlczkgPj0gMDsgYm94ZXM5LS0pIHsKICAgICAgICAgICAgYm94ZXM2ID0gKG4gLSBib3hlczIwICogMjAgLSBib3hlczkgKiA5KSAvIDY7CiAgICAgICAgICAgIGlmIChib3hlczYgKiA2ICsgYm94ZXM5ICogOSArIGJveGVzMjAgKiAyMCA9PSBuKSB7CiAgICAgICAgICAgICAgICBmb3VuZFNvbHV0aW9uID0gMTsKICAgICAgICAgICAgICAgIHByaW50U29sdXRpb24oYm94ZXM2LCBib3hlczksIGJveGVzMjApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICghZm91bmRTb2x1dGlvbikgewogICAgICAgIGludCBjbG9zZXN0ID0gZmluZENsb3Nlc3RQb3NzaWJsZShuKTsKICAgICAgICBwcmludGYoIlVuZm9ydHVuYXRlbHksIHdlIGNhbm5vdCBnaXZlICVkIG51Z2dldHMsIGhvd2V2ZXIgd2UgY2FuIG9mZmVyIHlvdSAlZDpcbiIsIG4sIGNsb3Nlc3QpOwogICAgICAgIHNvbHZlTnVnZ2V0cyhjbG9zZXN0KTsKICAgIH0KfQoKdm9pZCBwcmludFNvbHV0aW9uKGludCBib3hlczYsIGludCBib3hlczksIGludCBib3hlczIwKSB7CiAgICBwcmludGYoIjZ4IEJveDogJWRcbjl4IEJveDogJWRcbjIweCBCb3g6ICVkXG4iLCBib3hlczYsIGJveGVzOSwgYm94ZXMyMCk7Cn0KCnZvaWQgcHJpbnRJbXBvc3NpYmxlKGludCBuKSB7CiAgICBwcmludGYoIkVpIG9sZSB2w7VpbWFsaWsgYW5kYSAlZCB0w7xra2kuXG4iLCBuKTsKfQoKaW50IGZpbmRDbG9zZXN0UG9zc2libGUoaW50IG4pIHsKICAgIGludCBjbG9zZXN0ID0gbiArIDE7CiAgICB3aGlsZSAoMSkgewogICAgICAgIGludCBib3hlczYsIGJveGVzOSwgYm94ZXMyMDsKICAgICAgICBmb3IgKGJveGVzMjAgPSBjbG9zZXN0IC8gMjA7IGJveGVzMjAgPj0gMDsgYm94ZXMyMC0tKSB7CiAgICAgICAgICAgIGZvciAoYm94ZXM5ID0gKGNsb3Nlc3QgLSBib3hlczIwICogMjApIC8gOTsgYm94ZXM5ID49IDA7IGJveGVzOS0tKSB7CiAgICAgICAgICAgICAgICBib3hlczYgPSAoY2xvc2VzdCAtIGJveGVzMjAgKiAyMCAtIGJveGVzOSAqIDkpIC8gNjsKICAgICAgICAgICAgICAgIGlmIChib3hlczYgKiA2ICsgYm94ZXM5ICogOSArIGJveGVzMjAgKiAyMCA9PSBjbG9zZXN0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2xvc2VzdCsrOwogICAgfQp9