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

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Извиняюсь, если подобный вопрос уже был на форуме, поиск и просмотр 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>...

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

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

26
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
24.09.2009, 23:14 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
#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
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.09.2009, 23:41 3
> а то у меня компилятор не проглотил сперва простое возведение в степень )))

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

Решение

да и циклов как-то много
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
Эксперт С++
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.09.2009, 06:24 5
GennDALF,
В Вашем алгоритме есть еще одна существенная ошибка: У Вас выпали из проверки числа у которых есть цифры "0". Например 507 и т.п.
2
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
25.09.2009, 06:33 6
блин точно! что-то я ступил.. спасибо что сказали!
0
l1qu1d
25.09.2009, 07:11 7
Большое спасибо за помощь!
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.09.2009, 11:32 8
Цитата Сообщение от easybudda Посмотреть сообщение
да и циклов как-то много
Выбор вида программы в первую очередь должен определяться простотой её понимания, а не количеством цифр и переменных

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

C
1
2
3
b = (a % 100) / 10;
c = a % 10;
a /= 100;
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
25.09.2009, 13:25 11
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
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.09.2009, 13:33 12
Цитата Сообщение от easybudda Посмотреть сообщение
Evg, Очень спорно! Больше текста - больше ошибок
Абсолютная неправда. Ошибок больше тогда, когда больше сложного текста, в который надо вдумываться. Ярким примером служит твой второй тест - лично я его даже смотреть не стал. А вот вариант gendalf'а понять с одного взгляда и без каких либо "приглядеться повнимательнее".

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

Я не навязываю тебе твою точку зрения. Просто высказываю своё мнение, проверенное многолетним опытом
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
25.09.2009, 13:43 13
Цитата Сообщение от Evg Посмотреть сообщение
Абсолютная неправда. Ошибок больше тогда, когда больше сложного текста, в который надо вдумываться. Ярким примером служит твой второй тест - лично я его даже смотреть не стал. А вот вариант gendalf'а понять с одного взгляда и без каких либо "приглядеться повнимательнее".
Всё равно не соглашусь. Вдумываться так или иначе всё равно прийдётся. А понять одну строчку, пусть и кажущуюся на первый взгляд чем-то вроде "Здесь был Вася" на марсианском языке, по-моему всё-таки проще, чем три цикла, шесть переменных, да ещё и функцию дополнительную. По поводу ИЕ ничего не скажу. Понятия не имею, кто там что и как писал... Просто из любопытства: а Вы все эти 10 лет от него исходники где смотрели?
0
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.09.2009, 14:00 14
Цитата Сообщение от 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Эксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
25.09.2009, 14:06 15
Цитата Сообщение от Evg Посмотреть сообщение
А глобальный геморрой начинается вот с таких вот мелочей из разряда "сэкономить количество переменных".
Не, ну в крайности-то впадать не нужно. Всегда от ситуации зависит. В этом случае вполне можно и одной переменной обойтись, от которой просто по цифре отрезается. Если для ясности лучше, когда что-то в дополнительных переменных сохраняется (даже если можно было бы и "сэкономить" на них), так пусть будут переменные, да ещё и с комментариями, а то потом всё равно голову ломать прийдётся... С другой стороны, если наплодить два десятка переменных там, где и двух-то много, так запутаться ещё проще будет. Особенно если им имена давать типа a b c или вроде того... Я так считаю...
0
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
25.09.2009, 18:23 16
Что касается экономии переменных и вообще того, как я написал эту задачку, то здесь причина проста: я начинал учиться программировать уже на объектно-ориентированных языках, как то VB.NET и именно С++, а не старый С. И потому мне так проще воспринимать код, когда даже расчет трехзначного числа вынесен в отдельную функцию.

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru