Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
l1qu1d

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

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

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

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

Кому не трудно, черканите в эту тему, пожалуйста, как это будет выглядеть в C++.
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2009, 22:37
Ответы с готовыми решениями:

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

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

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

26
 Аватар для GennDALF
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
24.09.2009, 23:14
думаю, что примерно так:
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
#include <iostream>
#include <conio.h>
using namespace std;
 
int number(int HUNDREDS, int TENS, int DIGITS);
 
int main() {
      
      for (int i = 1; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                  for (int k = 1; k < 10; k++) {
                        if ( (i^3 + j^3 + k^3) == number(i,j,k) )
                              cout << number(i,j,k) << endl;
                        //else
                        //      cout << "Fuck!\n";
                  }
            }
      }
 
      getch();
      return 0;
}
 
int number(int HUNDREDS, int TENS, int DIGITS) {
      int final = 0;
      final = HUNDREDS*100 + TENS*10 + DIGITS;
 
      return final;
}
пусть меня поправят если не так =)

Добавлено через 19 минут
для надежности в теле цикла условие можно прописать так:
C++
1
      if ( (pow(i,3) + pow(j,3) + pow(k,3)) == number(i,j,k) )
но тогда обязательно надо включить еще <math.h>
а то у меня компилятор не проглотил сперва простое возведение в степень )))
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.09.2009, 23:41
> а то у меня компилятор не проглотил сперва простое возведение в степень )))

В Си "^" это не возведение в степень, а xor. А степени нет вообще. ТОгда уж проще переписать вот так: I*i*i + j*j*j + k*k*k
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
25.09.2009, 00:33
Лучший ответ Сообщение было отмечено как решение

Решение

да и циклов как-то много
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;
 
int main(){
    int i, a, b, c;
    
    for ( i = 100; i < 1000; i++ ){
        a = i;
        b = (a % 100) / 10;
        c = a % 10;
        a /= 100;
        if ( ((a*a*a) + (b*b*b) + (c*c*c)) == i )
            cout << i << endl;
    }
    return 0;
}
Добавлено через 33 минуты
и переменных тоже много...
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using std::cout;
using std::endl;
 
int main(){
    int i;
    
    for ( i = 100; i < 1000; i++ )
        if ( ((i / 100)*(i / 100)*(i / 100) + ((i % 100) / 10)*((i % 100) / 10)*((i % 100) / 10) + (i % 10)*(i % 10)*(i % 10)) == i )
            cout << i << endl;
    return 0;
}
4
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.09.2009, 06:24
GennDALF,
В Вашем алгоритме есть еще одна существенная ошибка: У Вас выпали из проверки числа у которых есть цифры "0". Например 507 и т.п.
2
 Аватар для GennDALF
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
25.09.2009, 06:33
блин точно! что-то я ступил.. спасибо что сказали!
0
l1qu1d
25.09.2009, 07:11
Большое спасибо за помощь!
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.09.2009, 11:32
Цитата Сообщение от easybudda Посмотреть сообщение
да и циклов как-то много
Выбор вида программы в первую очередь должен определяться простотой её понимания, а не количеством цифр и переменных

А вариант Gendalf'а - в нём два вложенных цикла с нуля должны начинаться, а не с единицы
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
25.09.2009, 13:10
Цитата Сообщение от Evg Посмотреть сообщение
Выбор вида программы в первую очередь должен определяться простотой её понимания, а не количеством цифр и переменных
Хорошо, для именно этой задачи слишком много циклов и переменных. Сама по себе задача простая, как раз на три строчки. Которые, по моему скромному, не то, чтобы сложно осмыслить. Ошибаюсь?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.09.2009, 13:17
Цитата Сообщение от easybudda Посмотреть сообщение
Хорошо, для именно этой задачи слишком много циклов и переменных. Сама по себе задача простая, как раз на три строчки. Которые, по моему скромному, не то, чтобы сложно осмыслить. Ошибаюсь?
Как ты думаешь, сколько человек из 100 напишут этот фрагмент с первого раза без ошибок (не запуская при этом на исполнение). И сколько человек из 100 напишут вариант Gendalf'а без ошибок? На мой взгляд вторых будет больше

C
1
2
3
b = (a % 100) / 10;
c = a % 10;
a /= 100;
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
25.09.2009, 13:25
Evg, Очень спорно! Больше текста - больше ошибок. А на счёт "с первого раза" - так мы же здесь вроде как учимся... Кстати, вот в таком виде
C++
1
if ( ((i / 100)*(i / 100)*(i / 100) + ((i % 100) / 10)*((i % 100) / 10)*((i % 100) / 10) + (i % 10)*(i % 10)*(i % 10)) == i )
оно по-моему даже нагляднее. Если приглядеться повнимательнее...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.09.2009, 13:33
Цитата Сообщение от easybudda Посмотреть сообщение
Evg, Очень спорно! Больше текста - больше ошибок
Абсолютная неправда. Ошибок больше тогда, когда больше сложного текста, в который надо вдумываться. Ярким примером служит твой второй тест - лично я его даже смотреть не стал. А вот вариант gendalf'а понять с одного взгляда и без каких либо "приглядеться повнимательнее".

А вот потом такой вот "умный код" начинает плодиться и разнможаться. А при дальнейшей модификации нужно в него вникать и втыкать, что как правило заканчивается тем, что при модификации вносятся ошибки. В результате имеем то, что программы типа ИЕ только к 8-й версии за 10 лет развития начинают работать более-менее безглючно

Я не навязываю тебе твою точку зрения. Просто высказываю своё мнение, проверенное многолетним опытом
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
25.09.2009, 13:43
Цитата Сообщение от Evg Посмотреть сообщение
Абсолютная неправда. Ошибок больше тогда, когда больше сложного текста, в который надо вдумываться. Ярким примером служит твой второй тест - лично я его даже смотреть не стал. А вот вариант gendalf'а понять с одного взгляда и без каких либо "приглядеться повнимательнее".
Всё равно не соглашусь. Вдумываться так или иначе всё равно прийдётся. А понять одну строчку, пусть и кажущуюся на первый взгляд чем-то вроде "Здесь был Вася" на марсианском языке, по-моему всё-таки проще, чем три цикла, шесть переменных, да ещё и функцию дополнительную. По поводу ИЕ ничего не скажу. Понятия не имею, кто там что и как писал... Просто из любопытства: а Вы все эти 10 лет от него исходники где смотрели?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.09.2009, 14:00
Цитата Сообщение от easybudda Посмотреть сообщение
Всё равно не соглашусь. Вдумываться так или иначе всё равно прийдётся. А понять одну строчку, пусть и кажущуюся на первый взгляд чем-то вроде "Здесь был Вася" на марсианском языке, по-моему всё-таки проще, чем три цикла, шесть переменных, да ещё и функцию дополнительную. По поводу ИЕ ничего не скажу. Понятия не имею, кто там что и как писал... Просто из любопытства: а Вы все эти 10 лет от него исходники где смотрели?
Я его исходники не смотрел. Я написал условно. Но есть в жизни такое, что геморройно написанные программы живут недолго. А глобальный геморрой начинается вот с таких вот мелочей из разряда "сэкономить количество переменных". Убеждать тебя в чём-то нет ни времени, ни желания. Пиши так, как считаешь для себя более приемлимым. А время покажет, в чём ты был прав, а в чём ошибался

Добавлено через 11 минут
Я бы написал вот так

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int
main (void)
{
  int i, j, k, num;
 
  for (i = 1; i <= 9; i++)
    for (j = 0; j <= 9; j++)
      for (k = 0; k <= 9; k++)
        {
          num = 100*i + 10*j + k;
          if (num == (i*i*i + j*j*j + k*k*k))
            printf ("%d\n", num);
        }
 
  return 0;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
25.09.2009, 14:06
Цитата Сообщение от Evg Посмотреть сообщение
А глобальный геморрой начинается вот с таких вот мелочей из разряда "сэкономить количество переменных".
Не, ну в крайности-то впадать не нужно. Всегда от ситуации зависит. В этом случае вполне можно и одной переменной обойтись, от которой просто по цифре отрезается. Если для ясности лучше, когда что-то в дополнительных переменных сохраняется (даже если можно было бы и "сэкономить" на них), так пусть будут переменные, да ещё и с комментариями, а то потом всё равно голову ломать прийдётся... С другой стороны, если наплодить два десятка переменных там, где и двух-то много, так запутаться ещё проще будет. Особенно если им имена давать типа a b c или вроде того... Я так считаю...
0
 Аватар для GennDALF
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
25.09.2009, 18:23
Что касается экономии переменных и вообще того, как я написал эту задачку, то здесь причина проста: я начинал учиться программировать уже на объектно-ориентированных языках, как то VB.NET и именно С++, а не старый С. И потому мне так проще воспринимать код, когда даже расчет трехзначного числа вынесен в отдельную функцию.

Я считаю, что не спроста эволюция высокоуровневых языков стремится ввести как раз объектно-ориентированный подход, видимо в этом есть резон.
И я полностью согласен с Evg. Когда приходится часами медитировать над сложным многостраничным кодом, где каждая вторая строчка выглядит примерно как во втором варианте easybudda, то тогда начинаешь понимать, что лучше потратить 1 МБ вместо 100 кБ, и ввести 20 переменных вместо 10, но только чтобы это выглядело понятно!
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
25.09.2009, 18:41
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
25.09.2009, 18:50
GennDALF, ну может быть и так... С другой стороны я вот больше в исходниках от разных никсовых програмок люблю покапаться (написанных большей частью как-раз на "старом" С)... Порой встречаются по-настоящему красивые решения, хоть на первый взгляд и абсолютно непонятные. На С++ не всегда так получилось бы, а уж про VB и речи не идёт... Опять же, если в многостраничном коде каждая вторая строчка требует того, чтоб над ней задумываться, это, видимо, тоже не спроста. И вряд ли с целью запутать тех, кто этот код потом читать будет. Мало того, обычно к сложным моментам комментарии пишут. Да и думать - не такое уж плохое занятие...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.09.2009, 20:30
Цитата Сообщение от 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
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
25.09.2009, 20:36
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.09.2009, 20:36
Помогаю со студенческими работами здесь

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

Простой запрос, студенческая задачка
Доброго времени суток. Я студент и прошу помощи у продвинутых. Fam - фамилии студентов pers - все персоналии (студенты, преподаватели,...

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

Студенческая весна
Скоро студенческая весна-для студентов очередной повод выпить. решили выступить. с чем выступить-ваши варианты))

Студенческая группа,сосотоящая из 20 человек
Студенческая группа,состоящая из 20 человек,написала контрольную работу,в которой было 3 задания. Выяснилось,что 8 человек решили первое...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru