Форум программистов, компьютерный форум CyberForum.ru

Программа на C++ (Сумма кубов) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.67
Estale
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
12.10.2009, 21:17     Программа на C++ (Сумма кубов) #1
Здравствуйте уважаемые программисты. Подскажите как решать задачу.
Условие таково:
Найти наименьшее натуральное n, которое можно представить двумя различными способами в виде суммы кубов двух натуральных чисел x^3+y^3 (x>=y)

P.S. ^3 - куб
>= - больше или равно
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2009, 21:17     Программа на C++ (Сумма кубов)
Посмотрите здесь:

сумма кубов C++
Не правильно работает... Программа должна найти непрерывные участки, на которых сумма элементов равна 100 C++
программа, которая находит на заданном отрезке все числа, которые равны сумме кубов своих цифр C++
C++ Сумма (правильно ли написана программа?)
Программа должна распечатывать прописью значение суммы в долларах,если введена сумма в рублях,или... C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
12.10.2009, 21:45     Программа на C++ (Сумма кубов) #2
Условие x>=y совершенно не нужно

"Подскажите как решать задачу" - что именно ?
Написать ответ, написать алгоритм, написать код ?
Estale
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
12.10.2009, 21:48  [ТС]     Программа на C++ (Сумма кубов) #3
Цитата Сообщение от odip Посмотреть сообщение
Условие x>=y совершенно не нужно

"Подскажите как решать задачу" - что именно ?
Написать ответ, написать алгоритм, написать код ?
Можно алгоритм, можно код, можно и то и то... А там уже буду пытаться вникнуть в суть ))
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.10.2009, 21:55     Программа на C++ (Сумма кубов) #4
Вот код, но уже 2 минуты жду и не дождусь результата.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream.h>
#include <math.h>
#include <process.h>
int a, b, c, d, n;
int main()
{
    for(n=2;; n++)
    for(a=1;a<n-1;a++)
        for(b=1; b<n-1; b++)
            if(pow(a,3)+pow(b,3)==n)
            {   
                for(c=1;c<n-1;c++)
                    for(d=1; d<n-1; d++)
                        if((pow(c,3)+pow(d,3)==n) && c!=a && c!=b)
                        {
                            cout<<"n = "<<n<<endl;
                            if(b<a)
                            {
                                cout<<"x1 = "<<a<<endl;
                                cout<<"y1 = "<<b<<endl;
                            }
                            else
                            {
                                cout<<"x1 = "<<b<<endl;
                                cout<<"y1 = "<<a<<endl;
                            }
                            if(d<c)
                            {
                                cout<<"x2 = "<<c<<endl;
                                cout<<"y2 = "<<d<<endl;
                            }
                            else
                            {
                                cout<<"x2 = "<<d<<endl;
                                cout<<"y2 = "<<c<<endl;
                            }
 
                            system("pause");
                            exit(1);
                        }
            }
    
    return 0;
}
HIMen
 Аватар для HIMen
4105 / 1354 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
12.10.2009, 21:57     Программа на C++ (Сумма кубов) #5
process.h там явно не нужен и зачем a b c d n глобальные?
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
12.10.2009, 22:07     Программа на C++ (Сумма кубов) #6
Ответ
n=20683 x=10 y=27
n=20683 x=19 y=24
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.10.2009, 22:07     Программа на C++ (Сумма кубов) #7
HIMen,
цикл "for(n=2;; n++);" бесконечный, чтобы его закончить при нахождении нужных значений, использую "exit(1);", для которого нужен "process.h". Ведь даже при нахождении нужного значения цикл будет продолжаться без "exit(1);". Если есть другой вариант - предлагайте.
Насчет a b c d n глобальных - не возражаю, можно и не глобальные.
Кстати, появился результат:
n=1729
x1=12
y1=1
x2=10
y2=9
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
12.10.2009, 22:09     Программа на C++ (Сумма кубов) #8
2valeriikozlov: Судя по моему ответу 4 цикла по 21000 значений.
Ну вообщем твой код будет очень долго считать

Добавлено через 51 секунду
О!
Я где-то обсчитался
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.10.2009, 22:10     Программа на C++ (Сумма кубов) #9
odip,
Но зато каков ответ
HIMen
 Аватар для HIMen
4105 / 1354 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
12.10.2009, 22:15     Программа на C++ (Сумма кубов) #10
Цитата Сообщение от valeriikozlov Посмотреть сообщение
HIMen,
цикл "for(n=2;; n++);" бесконечный, чтобы его закончить при нахождении нужных значений, использую "exit(1);", для которого нужен "process.h".
зачем лишние библиотеки, goto как раз для этой ситуации
Estale
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
12.10.2009, 22:18  [ТС]     Программа на C++ (Сумма кубов) #11
Может можно как-то через "switch", "case" и "break" и обойтись без "exit(1)"?
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
12.10.2009, 22:24     Программа на C++ (Сумма кубов) #12
Нашел ошибку - нефиг было на perl писать
Правильный ответ: 1729
Только считать можно во много раз быстрее.

Добавлено через 1 минуту
Вообщем код на Perl
Perl 6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/perl
 
use 5.8.8; use strict; use warnings;
 
sub power($$);
 
 
my ($n,$x,$y,$count,$n_3,$ost);
 
for ($n= 1; ; $n++ ) {
    $count= 0;
    for ( $x= 1; ; $x++ ) {
        $ost= $n-$x*$x*$x;
        if ( $ost<=0 ) { last; }
        $y= int( power( $ost, 1.0/3.0 )+0.5 );
 
        if ( $x<=$y && $ost == $y*$y*$y ) {
            $count++;
            #print "n=$n count=$count x=$x y=$y\n";
        }
    }
    if ( $count>=2 ) { print "n=$n\n"; last; }
}
 
exit 0;
 
 
#### sub ####
sub power($$) {
 
return exp( $_[1]*log( $_[0] ) );
 
} #### power()
На C нетрудно переделать.
Считает очень быстро

Добавлено через 3 минуты
Код
n=1729
n=4104
n=13832
n=20683
n=32832
n=39312
n=40033
n=46683
n=64232
n=65728
n=110656
n=110808
n=134379
n=149389
n=165464
n=171288
n=195841
n=216027
n=216125
n=262656
n=314496
n=320264
n=327763
n=373464
n=402597
n=439101
n=443889
n=513000
Это разные n.
Estale
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
12.10.2009, 22:25  [ТС]     Программа на C++ (Сумма кубов) #13
Цитата Сообщение от odip Посмотреть сообщение
Нашел ошибку - нефиг было на perl писать
Правильный ответ: 1729
Только считать можно во много раз быстрее.

Добавлено через 1 минуту
Вообщем код на Perl
Perl 6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/perl
 
use 5.8.8; use strict; use warnings;
 
sub power($$);
 
 
my ($n,$x,$y,$count,$n_3,$ost);
 
for ($n= 1; ; $n++ ) {
    $count= 0;
    for ( $x= 1; ; $x++ ) {
        $ost= $n-$x*$x*$x;
        if ( $ost<=0 ) { last; }
        $y= int( power( $ost, 1.0/3.0 )+0.5 );
 
        if ( $x<=$y && $ost == $y*$y*$y ) {
            $count++;
            #print "n=$n count=$count x=$x y=$y\n";
        }
    }
    if ( $count>=2 ) { print "n=$n\n"; last; }
}
 
exit 0;
 
 
#### sub ####
sub power($$) {
 
return exp( $_[1]*log( $_[0] ) );
 
} #### power()
На C нетрудно переделать.
Считает очень быстро
Быстро... Но мне быстро и не надо.
Мне нужно написать эту программу как можно проще, чтобы разобраться в ней, понять принцип и нормально объяснить преподавателю если будут вопросы по программе.

Поэтому если можно, то как можно проще... Заранее благодарен!
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
12.10.2009, 22:31     Программа на C++ (Сумма кубов) #14
Хорошо - способен ты понять код в посте #12 или в посте #4 ?
Estale
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
12.10.2009, 22:43  [ТС]     Программа на C++ (Сумма кубов) #15
Цитата Сообщение от odip Посмотреть сообщение
Хорошо - способен ты понять код в посте #12 или в посте #4 ?
Тот что в #12 я без понятия...
Тот что в #4 вроде понятен, но хотелось бы узнать можно ли как-то обойтись без exit(1) и написать например через switch-case-break ?
И ещё, cout это как я понимаю ввод?
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
12.10.2009, 23:56     Программа на C++ (Сумма кубов) #16
да в программировании всё возможно.. и как завещали нам старожилы C++ cout это вывод на консоль=)
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
13.10.2009, 09:13     Программа на C++ (Сумма кубов) #17
можно ли как-то обойтись без exit(1) и написать например через switch-case-break ?
Замени exit(1) на goto.
kessi
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 19
14.11.2010, 20:14     Программа на C++ (Сумма кубов) #18
а можете выложить готовый код на С?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2010, 15:52     Программа на C++ (Сумма кубов)
Еще ссылки по теме:

Программа для ввода и вывода фамилий и оценок студентов. Отберите тех, у которых сумма баллов вторая по вел C++
C++ Разложение в сумму кубов
C++ Найти двузначное число, сумма кубов цифр которого равна N

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,670
15.11.2010, 15:52     Программа на C++ (Сумма кубов) #19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//////////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <iostream>
//////////////////////////////////////////////////////////////////////////////////////
bool is_cube_of(int  k, int&  base)
{    
    double  base_double = pow(static_cast<double>(k), 1.0 / 3);
    base = static_cast<int>(base_double) - 1;
    
    while(base * base * base < k)
    {
        ++base;    
    }
    return  base * base * base == k;
}
//////////////////////////////////////////////////////////////////////////////////////
bool  is_sum_2_cube
    (
        int   n,         
        int&  base_lesser, 
        int&  base_greater,
        int   base_min = 1 
    )
{
    int  base_lesser_cube = 0;
    for(base_lesser = base_min; base_lesser_cube <= n / 2; ++base_lesser)
    {        
        base_lesser_cube = base_lesser * base_lesser * base_lesser;
        int  remainder = n - base_lesser_cube;        
        if(is_cube_of(remainder, base_greater))
        {
            return base_lesser <= base_greater;
        }
    }
    return  false;
}
//////////////////////////////////////////////////////////////////////////////////////
void  print_sum_2_cube()
{
    int  counter = 0;
    for(int num_cur = 1; counter < 10; ++num_cur)
    {
        int  base_lesser_A   = 0; 
        int  base_greater_A  = 0;
 
        if(is_sum_2_cube(num_cur, base_lesser_A, base_greater_A))
        {
            int  base_lesser_B   = 0; 
            int  base_greater_B  = 0;
 
            if(is_sum_2_cube(num_cur, base_lesser_B, base_greater_B, base_lesser_A + 1))
            {
                std::cout << "#"
                          << ++counter
                          << ":\t"
                          << num_cur
                          << "\t"
                          << " = "
                          << base_lesser_A
                          << "^3 + "
                          << base_greater_A                          
                          << "^3"
                          << "\t"
                          << " = "
                          << base_lesser_B
                          << "^3 + "
                          << base_greater_B
                          << "^3"
                          << std::endl;
            }
        }
    }
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    print_sum_2_cube();
}
Yandex
Объявления
15.11.2010, 15:52     Программа на C++ (Сумма кубов)
Ответ Создать тему
Опции темы

Текущее время: 05:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru