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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
l1qu1d
Сообщений: n/a
#1

Студенческая задачка C++ - C++

24.09.2009, 22:37. Просмотров 1875. Ответов 26
Метки нет (Все метки)

Доброго времени суток!
Извиняюсь, если подобный вопрос уже был на форуме, поиск и просмотр 20+ страниц мне результат не выдал, поэтому надеюсь на вашу помощь.
Суть, как говорится, такова :

"Найдите и распечатайте все трехзначные числа, равные сумме кубов своих цифр".

Кому не трудно, черканите в эту тему, пожалуйста, как это будет выглядеть в C++.
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2009, 22:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Студенческая задачка C++ (C++):

Разработать класс "студенческая группа". Предусмотреть возможность работы с переменным числом студентов - C++
Помогите доделать, пожалуйста. #include <iostream.h> #include <conio.h> #include <process.h> #include <fstream.h> #include...

Описание класса "Студенческая группа" - C++
Добрый вечер! Нужна помощь в составлении программы. Условие: Описать класс "студенческая группа". Предусмотреть возможность работы с...

Описать класс "студенческая группа" - C++
Описать класс "студенческая группа". Предусмотреть возможность работы с переменным числом студентов, поиска студента по какому-либо...

задачка с++ - C++
#include <iostream> using namespace std; int main() { int a;int i,j,z,y; cout<<"vvedite el-tu massiva:"; ...

задачка c++ - C++
дан текстоавй файл включающий строки, содержащие цифры 1,3,4 5 8,2,3,5,8 2,7 написать програму, которая сделает выходной...

задачка - C++
Помогите, пожалуйста, решить задачу. Дан двухмерный целочисленный массив А размером nхm. Известно, что среди его элементов два и...

26
GennDALF
12 / 12 / 0
Регистрация: 24.09.2009
Сообщений: 61
25.09.2009, 18:23 #16
Что касается экономии переменных и вообще того, как я написал эту задачку, то здесь причина проста: я начинал учиться программировать уже на объектно-ориентированных языках, как то VB.NET и именно С++, а не старый С. И потому мне так проще воспринимать код, когда даже расчет трехзначного числа вынесен в отдельную функцию.

Я считаю, что не спроста эволюция высокоуровневых языков стремится ввести как раз объектно-ориентированный подход, видимо в этом есть резон.
И я полностью согласен с Evg. Когда приходится часами медитировать над сложным многостраничным кодом, где каждая вторая строчка выглядит примерно как во втором варианте easybudda, то тогда начинаешь понимать, что лучше потратить 1 МБ вместо 100 кБ, и ввести 20 переменных вместо 10, но только чтобы это выглядело понятно!
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
25.09.2009, 18:41 #17
Evg все правильно говорит.
А вариант easybudda можно немного исправить на более понятный:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using std::cout;
using std::endl;
 
#define D0 (i%10)
#define D1 ((i%100)/10)
#define D2 (i/100)
 
int main(){
        int i;
        
        for ( i = 100; i < 1000; i++ )
        if ( D2*D2*D2+D1*D1*D1+D0*D0*D0 == i ) {
                        cout << i << endl;
        }
        return 0;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,812
25.09.2009, 18:50 #18
GennDALF, ну может быть и так... С другой стороны я вот больше в исходниках от разных никсовых програмок люблю покапаться (написанных большей частью как-раз на "старом" С)... Порой встречаются по-настоящему красивые решения, хоть на первый взгляд и абсолютно непонятные. На С++ не всегда так получилось бы, а уж про VB и речи не идёт... Опять же, если в многостраничном коде каждая вторая строчка требует того, чтоб над ней задумываться, это, видимо, тоже не спроста. И вряд ли с целью запутать тех, кто этот код потом читать будет. Мало того, обычно к сложным моментам комментарии пишут. Да и думать - не такое уж плохое занятие...
0
Evg
Эксперт CАвтор FAQ
18030 / 6262 / 427
Регистрация: 30.03.2009
Сообщений: 17,207
Записей в блоге: 27
25.09.2009, 20:30 #19
Цитата Сообщение от easybudda Посмотреть сообщение
Опять же, если в многостраничном коде каждая вторая строчка требует того, чтоб над ней задумываться, это, видимо, тоже не спроста
Всё-таки надо отделять мух от котлет. Когда над каждой второй строкой надо думать из-за того, что ты попросту не знаешь внутреннее устройство программы - это одно, когда нужно думать из-за того, что кто-то решил сэкономить на переменных или на количестве строк кода - это совсем другое

Сравни два фрагмента. Пример взят из книги, чтобы не сочинять самому

C
1
child = (!LC&&!RC)?0:(!LC?RC:LC);
C
1
2
3
4
5
6
if (LC == 0 && RC == 0)
  child = 0;
else if (LC == 0)
  child = RC;
else
  child = LC;
Оба фрагмента делают одно и то же. В первом случае автор решил сэкономить количество строк. В результате получился код, в котором пока не переберёшь все комбинации, нихрена не поймёшь, хоть ты 10 строк комментария к нему напиши. Во втором случае достаточно одного взгляда, чтобы понять, что делается

Цитата Сообщение от easybudda Посмотреть сообщение
И вряд ли с целью запутать тех, кто этот код потом читать будет
А исходники разных юниксовых программ это священная корова что-ли? Их пишут такие же люди с такими же тараканами в голове. Глядя на некоторые куски кода, кроме как желания семиэтажно материться ничего не возникает. Глядя на других надо перенимать положительный опыт, и учитывать плохой. Но не наоборот

Цитата Сообщение от easybudda Посмотреть сообщение
Да и думать - не такое уж плохое занятие...
Думать полезно. Но бесполезно думать - вредно. Зачем писать код так, что над ним надо думать, когда можно написать так, что и без раздумий всё понятно?
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
25.09.2009, 20:36 #20
C
1
2
3
4
5
6
if (LC == 0 && RC == 0)
  child = 0;
else if (LC == 0)
  child = RC;
else
  child = LC;
Я вот подумал над этим кодом и решил его можно переписать так:
C
1
child= (LC==0) ? RC : LC;
2
Evg
Эксперт CАвтор FAQ
18030 / 6262 / 427
Регистрация: 30.03.2009
Сообщений: 17,207
Записей в блоге: 27
25.09.2009, 20:42 #21
odip, я не стал приводить более мудрённого примера. Замени 0 на 1 и тогда не надо будет думать В любом случае в варианте из 7 строк логика понятна сразу, а в твоём укороченном варианте надо думать. Но в любом случае за твой фрагмент спасибо - перепишу свой пост, чтобы вопросов не было

Добавлено через 1 минуту
Чёрт, уже нельзя редактировать. Ну да ладно
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,812
25.09.2009, 22:03 #22
Цитата Сообщение от Evg Посмотреть сообщение
В результате получился код, в котором пока не переберёшь все комбинации, нихрена не поймёшь, хоть ты 10 строк комментария к нему напиши.
Однако при искреннем моём к Вам уважении, по факту один в простенькой програмке грубую ошибку ляпнул, а второй схода суть поняв и не вдаваясь в детали её сразу и не заметил. Кстати про ослика, которого скорее всего на продвинутых объектно-ориентированных VB и С++ и пишут. Но особо не задумываются...

Цитата Сообщение от odip Посмотреть сообщение
child= (LC==0) ? RC : LC;
без комментариев
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
25.09.2009, 22:06 #23
Я могу редактировать

А про какую ошибку говорит easybudda - что-то не понял.
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,812
25.09.2009, 22:19 #24
odip,
Цитата Сообщение от valeriikozlov Посмотреть сообщение
В Вашем алгоритме есть еще одна существенная ошибка: У Вас выпали из проверки числа у которых есть цифры "0". Например 507 и т.п.
Вы, кстати, за этот пост человека поблагодарили (на первой же странице в этом топике).
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
25.09.2009, 22:27 #25
easybudda, ты конечно нашел о чем вспомнить !
Это было постов 20 назад

Добавлено через 3 минуты
Я тут придумал еще один вариант решения
C
1
printf( "153\n" "370\n" "371\n" "407\n" );
0
mirso
525 / 343 / 17
Регистрация: 05.04.2009
Сообщений: 709
25.09.2009, 22:49 #26
Цитата Сообщение от l1qu1d Посмотреть сообщение
Найдите и распечатайте все трехзначные числа, равные сумме кубов своих цифр
Цитата Сообщение от odip Посмотреть сообщение
printf( "153\n" "370\n" "371\n" "407\n" );

Не по теме:

odip, Де ты их(все трехзначные числа) откопал?!


Я считаю, что правильно и
так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream> 
 
int main ()//================================================
{
system ( "color 1a" );
 
    for ( unsigned short int h = 1; h <= 9; h++ ) //возможные цифры
    for ( unsigned short int t = 0; t <= 9; t++ ) 
    for ( unsigned short int d = 0; d <= 9; d++ )
    {
        if (  h*h*h + t*t*t + d*d*d == h*100 + t*10 + d  )//условие
        {
            unsigned short int x;
            //-------------------
            x = h*100 + t*10 + d;//искомое      
            //------------------- 
            std::cout << x << std::endl;
        }
    }
 
system ( "pause > nul" ); 
return EXIT_SUCCESS;
}//==========================================================
и
по-easybudda-вски
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream> 
 
int main ()//========================================
{
system ( "color 1a" );
unsigned short int a, b, c;
        
    for ( unsigned short int i = 100; i < 1000; i++ )
    {
        a =  i / 100;
        b =  i % 100 / 10;
        c =  i % 10;
        //-------------------------------
        if ( a*a*a + b*b*b + c*c*c == i )
        {
            std::cout << i << std::endl;
        }
    }
 
system ( "pause > nul" ); 
return EXIT_SUCCESS;
}//==================================================

Все зависит от поставленной цели.
0
Evg
Эксперт CАвтор FAQ
18030 / 6262 / 427
Регистрация: 30.03.2009
Сообщений: 17,207
Записей в блоге: 27
25.09.2009, 23:14 #27
mirso, а мы не спорим, как правильно Мы выясняем, как лучше
0
25.09.2009, 23:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2009, 23:14
Привет! Вот еще темы с ответами:

Задачка - C++
Помогите в решени Перепишите задание в сообщение.

Задачка - C++
Здравствуйте, есть задачка: &quot;Вводится строка, потом вводится символ. Далее нужно в строке убрать все эти символы, и сместить строку на...

Задачка - C++
Ребят, может кто срочно решить задачу? Описать структуры, описывающие шар и точку в 3-мерном пространстве. Определить функцию, которая...

задачка на с++ - C++
сделать таблицу размером N*N каждая строка и каждый столбец который содержит все числа от 1до N помогите не пойму как делать


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru