Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/51: Рейтинг темы: голосов - 51, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
1

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

12.10.2009, 21:17. Показов 10092. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые программисты. Подскажите как решать задачу.
Условие таково:
Найти наименьшее натуральное n, которое можно представить двумя различными способами в виде суммы кубов двух натуральных чисел x^3+y^3 (x>=y)

P.S. ^3 - куб
>= - больше или равно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2009, 21:17
Ответы с готовыми решениями:

сумма кубов
Известно, что любое натуральное число можно представить в виде суммы не более чем четырех квадратов...

Найти двузначное число, сумма кубов цифр которого равна N
Найти двузначное число, сумма кубов цифр которого равна N Вот есть такой код: #include <cstdlib>...

Программа, вычисляющая сумму квадратов и кубов чисел
Кому не составит труда, создайте, пожалуйста, программу, вычисляющую сумму квадратов и кубов чисел...

сумма кубов
Имя входного файла input.txt Имя выходного файла output.txt Максимальное время работы на одном...

18
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
12.10.2009, 21:45 2
Условие x>=y совершенно не нужно

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

"Подскажите как решать задачу" - что именно ?
Написать ответ, написать алгоритм, написать код ?
Можно алгоритм, можно код, можно и то и то... А там уже буду пытаться вникнуть в суть ))
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
12.10.2009, 21:55 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;
}
0
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
12.10.2009, 21:57 5
process.h там явно не нужен и зачем a b c d n глобальные?
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
12.10.2009, 22:07 6
Ответ
n=20683 x=10 y=27
n=20683 x=19 y=24
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
12.10.2009, 22:07 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
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
12.10.2009, 22:09 8
2valeriikozlov: Судя по моему ответу 4 цикла по 21000 значений.
Ну вообщем твой код будет очень долго считать

Добавлено через 51 секунду
О!
Я где-то обсчитался
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
12.10.2009, 22:10 9
odip,
Но зато каков ответ
0
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
12.10.2009, 22:15 10
Цитата Сообщение от valeriikozlov Посмотреть сообщение
HIMen,
цикл "for(n=2;; n++);" бесконечный, чтобы его закончить при нахождении нужных значений, использую "exit(1);", для которого нужен "process.h".
зачем лишние библиотеки, goto как раз для этой ситуации
0
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
12.10.2009, 22:18  [ТС] 11
Может можно как-то через "switch", "case" и "break" и обойтись без "exit(1)"?
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
12.10.2009, 22:24 12
Нашел ошибку - нефиг было на perl писать
Правильный ответ: 1729
Только считать можно во много раз быстрее.

Добавлено через 1 минуту
Вообщем код на Perl
Perl
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.
0
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
12.10.2009, 22:25  [ТС] 13
Цитата Сообщение от odip Посмотреть сообщение
Нашел ошибку - нефиг было на perl писать
Правильный ответ: 1729
Только считать можно во много раз быстрее.

Добавлено через 1 минуту
Вообщем код на Perl
Perl
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 нетрудно переделать.
Считает очень быстро
Быстро... Но мне быстро и не надо.
Мне нужно написать эту программу как можно проще, чтобы разобраться в ней, понять принцип и нормально объяснить преподавателю если будут вопросы по программе.

Поэтому если можно, то как можно проще... Заранее благодарен!
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
12.10.2009, 22:31 14
Хорошо - способен ты понять код в посте #12 или в посте #4 ?
0
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 20
12.10.2009, 22:43  [ТС] 15
Цитата Сообщение от odip Посмотреть сообщение
Хорошо - способен ты понять код в посте #12 или в посте #4 ?
Тот что в #12 я без понятия...
Тот что в #4 вроде понятен, но хотелось бы узнать можно ли как-то обойтись без exit(1) и написать например через switch-case-break ?
И ещё, cout это как я понимаю ввод?
0
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
12.10.2009, 23:56 16
да в программировании всё возможно.. и как завещали нам старожилы C++ cout это вывод на консоль=)
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
13.10.2009, 09:13 17
можно ли как-то обойтись без exit(1) и написать например через switch-case-break ?
Замени exit(1) на goto.
0
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 19
14.11.2010, 20:14 18
а можете выложить готовый код на С?
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
15.11.2010, 15:52 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();
}
0
15.11.2010, 15:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2010, 15:52
Помогаю со студенческими работами здесь

Сумма кубов
Известно, что любое натуральное число можно представить в виде суммы не более чем четырех квадратов...

сумма кубов
Нужно найти сумму кубов всех двузначных натуральных чисел! составить программу Q Basic. помогите...

Сумма кубов
Составить программу,вычисляющую сумму кубов всех 2-значных чисел. Тут с кубами всё норм,а вот с...

Сумма кубов
Найти наименьшее натуральное число n, представимое двумя различными способами в виде суммы кубов...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru