C++ Задача на оптимизацию кода [Дополнительная задача]

Пользователь
Статус
Оффлайн
Регистрация
19 Май 2019
Сообщения
294
Реакции[?]
43
Поинты[?]
0
Здравствуйте, уважаемые пользователи, решил чутка дополнить прошлую тему от DREDD.

Задача:
Пользователь должен ввести любую цифру, например 5 (n = 5), нам нужны числа xyz, где x+y+z=n (203, 2+0+3=5), также программа должна будет записывать все данные в лог-файл, в выводе будут только корректные данные. Количество итераций сокращать не нужно.

Пример:
Пользователь ввел число 5 (n = 5), нам нужны числа xyz, где x+y+z=n (203, 2+0+3=5).
104
113
122
131
140
203
212
221
230
302
311
320
401
410
500

Запись файла (не все итерации, иначе это пиздец):
100 - not correctly
101 - not correctly
102 - not correctly
103 - not correctly
104 - correctly
105 - not correctly
106 - not correctly
107 - not correctly
108 - not correctly
109 - not correctly
110 - not correctly
111 - not correctly
112 - not correctly
113 - correctly
....... много итераций
991 - not correctly
992 - not correctly
993 - not correctly
994 - not correctly
995 - not correctly
996 - not correctly
997 - not correctly
998 - not correctly
999 - not correctly

Iterations: 900
Correctly: 15
Wrong: 885

Мне будет интересно посмотреть на ваши результаты и реализации. Спасибо. Если не трудно, прикладывайте код.

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Администратор
Администратор
Статус
Оффлайн
Регистрация
18 Авг 2017
Сообщения
2,332
Реакции[?]
1,574
Поинты[?]
72K
C++:
#include <iostream>
#include <fstream>

void GetCorrectValue(std::ostream &os) {
    unsigned n = 0, count = 0;
    std::cin >> n;

    os << "[Data: n = " << n << "]" << std::endl;
    for (int x = std::max(1, n - 18); x <= std::min(9, n); x++) {
        for (int y = std::max(0, n - x - 9); y <= std::min(9, n - x); y++) {
            os << x << y << n - x - y << " — correctly." << std::endl;
            std::cout << x << y << n - x - y << std::endl;
            ++count;
        }
    }
    os << std::endl << "Iteration: " << count << std::endl;
    os << "Correctly: " << count << std::endl;
    os << "Wrong: " << 0 << std::endl << "[End Data]" << std::endl;

}

int main() {
    std::filebuf fb;
    fb.open("test.txt", std::ios::app);
    std::ostream os(&fb);
    GetCorrectValue(os);
    fb.close();


    return 0;
}
 
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
Вообще асимтотически быстрее чем предложил DREDD уже не сделать, можно разве что с константой ебаться и сделать решение которое будет быстрее на пару процентов
 
Сверху Снизу