Сообщение Re: Помогите Васе от 25.06.2015 18:54
Изменено 25.06.2015 20:27 watchmaker
Здравствуйте, olimp_20, Вы писали:
Странный оператор continue. Если он реализуется хоть раз, то никакие переменные не изменят свои значения, а цикл будет вечным.
Слишком большая верхняя граница перебора. И нет нужды рассматривать перестановки слагаемых. Куда лучше будет, если по-прежнему сохранить требование j³ ≤ n, но при этом потребовать чтобы одновременно j не превосходило предыдущего взятого значения (a[i-1], если оно определено, конечно).
Нижняя граница слишком низка — незачем перебирать все малые x, если их суммы заведомо не хватит для достижения n.
_> while(j>0){
_> int x = j*j*j;
_> if(n - x < 0) continue;
Странный оператор continue. Если он реализуется хоть раз, то никакие переменные не изменят свои значения, а цикл будет вечным.
_> int j=pow(n*1.0, 1.0/3.0);//начать поиск с чила, куб которого меньше либо равно n
Слишком большая верхняя граница перебора. И нет нужды рассматривать перестановки слагаемых. Куда лучше будет, если по-прежнему сохранить требование j³ ≤ n, но при этом потребовать чтобы одновременно j не превосходило предыдущего взятого значения (a[i-1], если оно определено, конечно).
_> while(j>0){
Нижняя граница слишком низка — незачем перебирать все малые x, если их суммы заведомо не хватит для достижения n.
Re: Помогите Васе
Здравствуйте, olimp_20, Вы писали:
Странный оператор continue. Если он реализуется хоть раз, то никакие переменные не изменят свои значения, а цикл будет вечным.
Слишком большая верхняя граница перебора. И нет нужды рассматривать перестановки слагаемых. Куда лучше будет, если по-прежнему сохранить требование j³ ≤ n, но при этом потребовать чтобы одновременно j не превосходило предыдущего взятого значения (a[i-1], если оно определено, конечно).
Ну и округление вещественного числа в этой строке сделано плохо. Так, например, в некоторых очень популярных реализациях (int)pow(125*1.0, 1.0/3.0) == 4, хотя кубический корень из 125 равен 5.
Нижняя граница слишком низка — незачем перебирать все малые x, если их суммы заведомо не хватит для достижения n.
_> while(j>0){
_> int x = j*j*j;
_> if(n - x < 0) continue;
Странный оператор continue. Если он реализуется хоть раз, то никакие переменные не изменят свои значения, а цикл будет вечным.
_> int j=pow(n*1.0, 1.0/3.0);//начать поиск с чила, куб которого меньше либо равно n
Слишком большая верхняя граница перебора. И нет нужды рассматривать перестановки слагаемых. Куда лучше будет, если по-прежнему сохранить требование j³ ≤ n, но при этом потребовать чтобы одновременно j не превосходило предыдущего взятого значения (a[i-1], если оно определено, конечно).
Ну и округление вещественного числа в этой строке сделано плохо. Так, например, в некоторых очень популярных реализациях (int)pow(125*1.0, 1.0/3.0) == 4, хотя кубический корень из 125 равен 5.
_> while(j>0){
Нижняя граница слишком низка — незачем перебирать все малые x, если их суммы заведомо не хватит для достижения n.