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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
darkstalker739
17 / 17 / 2
Регистрация: 16.06.2013
Сообщений: 94
#1

Представьте число в виде суммы трех приблизительно равных натуральных чисел - C++

16.06.2013, 13:52. Просмотров 1760. Ответов 39
Метки нет (Все метки)

Задание: Дано натуральное число k. Представьте его в виде суммы трех приблизительно равных натуральных чисел.
Вот такой код с горем пополам я наклепал :

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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
 
int _tmain(int argc, _TCHAR* argv[]);
 
using namespace std; 
int main() // С++-программа начинается с функции main().
{
 setlocale(LC_CTYPE, "rus"); // русский язык в консоли
    int k,a,b,c;
    cout << ("ВВедите натуральное число:  \n");
    cin >> k ;
    if (k <= 0) cout << (" Это не натуральное число!!\n");
    if(k > 0)
                { 
                    (a = k / 3 - 1); 
                    cout << ("Первое число:  ");
                    cout << a;
                    cout << ("\n");
                     (b = k / 3);
                    cout << ("Второе число:  ");
                    cout << b;
                    cout << ("\n");
                     (c = k / 3 + 1); 
                     cout << ("Третье число:  ");
                     cout << c;
                     cout << ("\n");
                }
 
 
 
system("pause"); 
return(0);
}
Принцип такой - если вписать число которое делится на 3 - то все в порядке. Все значения выдает как надо.
Если же число делится на 3 c остатком (скажем 100) - то раскладываются на числа 32,33 и 34, что в сумме выходит 99.
Как можно реализовать проверку и дополнение?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2013, 13:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Представьте число в виде суммы трех приблизительно равных натуральных чисел (C++):

Определить, можно ли представить число N в виде суммы кубов трех натуральных чисел - C++
Определить можно ли представить заданное натуральное число N как сумму кубов каких-нибудь трех натуральных чисел n, m, k. ...

Определить, можно ли число представить в виде суммы квадратов трех натуральных чисел - C++
Дано натуральные число n . Можно ли представить его в виде суммы трех квадратов натуральных чисел? Если можно то, а) указать тройку x,y,z...

Выяснить, можно ли представить данное число в виде суммы трех квадратов натуральных чисел - C++
Дано натуральное число n. Можно ли представить его в виде суммы трех квадратов натуральных чисел? Если можно, то указать тройку x, y, z...

Дано натуральное число n. Можно ли представить его в виде суммы трех квадратов натуральных чисел? - C++
Подскажите как правильно составить программу к этим задачам: 1.Дано натуральное число n. Можно ли представить его в виде суммы трех...

Представить целое число N в виде суммы M примерно равных целых чисел. - C++
В голове не приходит нормального решения. Именуйте темы осмысленно! Название темы должно максимально полно отражать её содержимое.

Число в виде суммы квадратов натуральных чисел - C++
Дано натуральное число. Составить программу, которая представит данное число в виде суммы квадратов натуральных чисел, содержащей...

39
-=ЮрА=-
Заблокирован
Автор FAQ
16.06.2013, 15:46 #16
Цитата Сообщение от Thinker Посмотреть сообщение
наиболее близки, значит в этой задаче максимум на 1 должны отличаться)
- это не значит отличия на 1-цу, близкие значит числа в одном порядке 101 и 109 это близкие числа.
На счёт кода, вот доработанный вариант
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
#include <iostream>
using namespace std;
 
int main()
{
    int n;
    int a, b, c;
    int add = 0;
    while(true)
    {
        cout<<"Enter n : ";cin>>n;
        add = n % 3;
        a = (n - add) / 3;
        b = a - (add ? 2 : 1);
        c = a + (add ? 2 : 1);
        a = a + add;
        if( c == a)
        {
            c = c + 1;
            a = a - 1;
        }
        cout<<n<<" = "<<a<<" + "<<b<<" + "<<c<<endl;
    }
    return 0;
}
Основное достоинство - способ не возвращает чисел среди которых есть одинаковые.
Примечание для чисел n < 6 не существует a, b, с образующих тождественное равенство n = a + b + c {a != b != c}

Не по теме:

lazybiz,

Цитата Сообщение от lazybiz Посмотреть сообщение
Thinker, просто я его привел как самое простое решение..
- перед словом решение добавь слово неверное

1
Миниатюры
Представьте число в виде суммы трех приблизительно равных натуральных чисел  
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.06.2013, 15:48 #17
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- это не значит отличия на 1-цу
речь идет о модуле разности. в принципе, мне все равно, кто как понял)))
1
castaway
Эксперт С++
4887 / 3022 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
16.06.2013, 16:01 #18
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
перед словом решение добавь слово неверное
Как раз в отличии от твоего решения, мой результат оказался верным. Выражение "приблизительно равных" можно расценить по-разному. Я не считаю что 1 и 3 "приблизительно не равны".

Добавлено через 9 минут
-=ЮрА=-, что-то я не понял... ты написал что моё решение неверное, при этом привел пример скриншота своей программы которая выдает неправильные результаты.. Что ты этим хотел сказать?
1
-=ЮрА=-
Заблокирован
Автор FAQ
16.06.2013, 16:08 #19
lazybiz,
Цитата Сообщение от lazybiz Посмотреть сообщение
-=ЮрА=-, что-то я не понял... ты написал что моё решение неверное, при этом привел пример скриншота своей программы которая выдает неправильные результаты.. Что ты этим хотел сказать?
Я поправил свой код, да по невнимательности бросил недоведенный алгоритм, и?
Или это неверное решение ?
Или может быть это верное решение?
http://codepad.org/41U1BCLD
Output:
99 = 33 + 33 + 33

Не по теме:

lazybiz, мой код - это последний пост в данной теме, который абсолютно корректен, твой код генит два, три (в случае кратного 3-м) одинаковых числа, заданию это явно противоречит где речь ведётся не о 3-х одинаковых а о 3-х близких числах

1
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,186
16.06.2013, 16:08 #20
Цитата Сообщение от darkstalker739 Посмотреть сообщение
Плавающей точки также быть не должно. Только целочисленные вычисления т.е. int онли
её и так в ответах нет она только для упрощения чтобы выкинуть ветвления
хотя Thinker другой вариант предложил, тоже ничего себе
Цитата Сообщение от Thinker Посмотреть сообщение
ost = a % 3;
x += !!ost;
y += !(ost & 1);
лихо признаю
только у меня подозрение насчет
!!ost;
оптимизатор не выкинет?
можно так
C++
1
 x += (ost!=0);
да и прокомментировать, не все поймут что это за шаманство
1
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.06.2013, 16:11 #21
ValeryS, спасибо инструкции типа !!a очень даже полезны, компилятор такое проглотит и не заметит, но можно и вариант (a != 0)
0
castaway
Эксперт С++
4887 / 3022 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
16.06.2013, 16:13 #22
-=ЮрА=-, 3-й пост, я говорил о нём: Представьте число в виде суммы трех приблизительно равных натуральных чисел
0
-=ЮрА=-
16.06.2013, 16:18
  #23

Не по теме:

lazybiz, давай ещё поговрим кто на сколько написал контрольную в 3-м классе, лучше поправь свой код чтобы одинаковые цифры не генил

1
darkstalker739
17 / 17 / 2
Регистрация: 16.06.2013
Сообщений: 94
16.06.2013, 16:22  [ТС] #24
Цитата Сообщение от ValeryS Посмотреть сообщение
да и прокомментировать, не все поймут что это за шаманство
было бы неплохо
А то я совсем сами понимаете...
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.06.2013, 16:23 #25
Цитата Сообщение от darkstalker739 Посмотреть сообщение
было бы неплохо
посмотрите пост #5. если его поймете, то можно и этот прокомментировать
1
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
16.06.2013, 16:44 #26
Ооочень сложное задание)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
int main()
{
    int x; cin >> x;
    int a[3] = {x / 3, x / 3, x / 3};
    int i = 0;
 
    while ( a[0] + a[1] + a[2] < x ) {
        ++a[i % 3];
        ++i;
    }
 
    cout << x << " = " << a[0] << " + " << a[1] << " + " << a[2];
    return 0;
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
16.06.2013, 16:56 #27
Olivеr, http://codepad.org/mdjh5Pe9
90 = 30 + 30 + 30
- суть задания генить близкие, но разные а не одинаковые числа,
Цитата Сообщение от darkstalker739 Посмотреть сообщение
Представьте его в виде суммы трех приблизительно равных натуральных чисел.
решение для разных чисел уже приведено в посте 16

твоё текущее решение ничем не лучше решения в посте 2
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
16.06.2013, 17:13 #28
-=ЮрА=-, по заданию я понял, что числа должны отличатся не более чем на единицу.
Ладно, переделаем.
Вот мое решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
int main()
{
    while (true) {
        int x; cin >> x;
        int a[3] = {x / 3, x / 3 - 1, x / 3 - 2};
        int i = 0;
        while ( a[0] + a[1] + a[2] < x ) {
            ++a[i % 3];
            ++i;
        }
        cout << x << " = " << a[0] << " + " << a[1] << " + " << a[2] << endl;
    }
    return 0;
}
Только ноль - это не натуральное число и для, например, 2 выдает 2 + 1 + -1
0
Изображения
  
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.06.2013, 17:16 #29
Цитата Сообщение от Olivеr Посмотреть сообщение
по заданию я понял, что числа должны отличатся не более чем на единицу.

Не по теме:

так и есть, достаточно вспомнить метрическое пространство. в задании не сказано, что числа разные

0
castaway
Эксперт С++
4887 / 3022 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
16.06.2013, 17:18 #30
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
твоё текущее решение ничем не лучше решения в посте 2
Если на то пошло, то решение в посте № 16 тоже далеко не самое лучшее..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
using namespace std;
 
int main()
{
    int r, a;
    for ( int i = 3; i < 1000; i++ ) {
        r = i % 3;
        a = i / 3;
        cout << i << " = " << a - 1 << " + " << a + (r >> 1) << " + " << a + 1 + !!r << endl;
    }
    return 0;
}
0
16.06.2013, 17:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2013, 17:18
Привет! Вот еще темы с ответами:

Можно ли представить данное число в виде произведения трех последовательных натуральных чисел - C++
Помогите пожалуйста решить задачи на С++ 2) (Функция) Дано натуральное число n. Выяснить, можно ли представить n в виде произведения...

Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел. - C++
Собственно само задание. 5). Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно представить в виде суммы...

Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел - C++
Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел.

Определить, можно ли представить число в виде суммы двух квадратов натуральных чисел - C++
Дано натуральное число n.Определить,можно ли представить его в виде суммы двух квадратов натуральных чисел.Если да,то найти все пары x,y...


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

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

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