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

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

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

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

16.06.2013, 13:52. Просмотров 1710. Ответов 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
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
16.06.2013, 14:14 #2
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
using namespace std;
 
int main()
{
    int a = 80;
    cout << a << " = " << a / 3 << " + " << a / 3 << " + " << a / 3 + a % 3;
    return 0;
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
16.06.2013, 14:40 #3
Цитата Сообщение от darkstalker739 Посмотреть сообщение
Задание: Дано натуральное число k. Представьте его в виде суммы трех приблизительно равных натуральных чисел.
- держи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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 / 3;
        b = a - add;
        c = a + add;
        cout<<n<<" = "<<a<<" + "<<b<<" + "<<c<<endl;
    }
    return 0;
}
0
Миниатюры
Представьте число в виде суммы трех приблизительно равных натуральных чисел  
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
16.06.2013, 14:45 #4
-=ЮрА=-, 33 + 32 + 34 = 100 ??

Добавлено через 25 секунд
3 + 1 + 5 = 11 ???
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.06.2013, 15:00 #5
lazybiz, ваш алгоритм надо немного подправить, а то 5 = 1 + 1 + 3 не совсем хорошо, лучше бы 5 = 2 + 2 + 1

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 a = 5, x, y, z, ost;
    x = y = z = a / 3;
    ost = a % 3;
    if (ost)
    {
       ++x;
       --ost;
       if (ost)
          ++y;
    }
    cout << a << " = " << x << " + " << y << " + " << z;
    return 0;
}
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
16.06.2013, 15:01 #6
Thinker, просто я его привел как самое простое решение..
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.06.2013, 15:06 #7
lazybiz, не спорю, простое решение, но числа не наиболее близки друг другу могут получиться, вот и подправил, теперь все случаи рассмотрены)
0
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
16.06.2013, 15:14 #8
ну может так
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 n;
int A,B,C;
double tmp;
cin>>n;
 
tmp=(double)n/3.0;
 
A=tmp+0.5;
B=A;
C=n-A-B;
cout << n << " = " << A << " + " << B << " + " << C;
return 0;
}
Не проверял, так накалякал
два числа должны быть одинаковы третье может отличатся на 1 или 2

Добавлено через 2 минуты
можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
int n;
int A,B,C;
double tmp;
cin>>n;
 
tmp=(double)n/3.0;
 
A=tmp+0.5;
 
tmp=(double)(n-A)/2.0;
B=tmp+0.5;
C=n-A-B;
cout << n << " = " << A << " + " << B << " + " << C;
return 0;
}
разница должна быть не больше единицы
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.06.2013, 15:14 #9
Цитата Сообщение от ValeryS Посмотреть сообщение
два числа должны быть одинаковы третье может отличатся на 1 или 2
наиболее близки, значит в этой задаче максимум на 1 должны отличаться)
0
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
16.06.2013, 15:30 #10
Thinker,
вторую прогу смотрел?

принцип простой
делим на 3 (дробно)
если дробь 0.3... значит A=n\3;
если дробь 0.6.... A=n\3+1;
вычитаем A из n
разность делим на два
если четное то B=(n-A)/2;
если нечетное то B=(n-A)/2+1;
С разность
в сумме всегда будет n
проверим
n=100
tmp=100/3=33.33333.....
A=33.3+0.5 =33
tmp=(100-33)/2=67/2=33.5;
B=33.5+0.5=34;
C =100-33-34=33;


n=101
tmp=101/3=33.666.....
A=33.6+0.5 =34
tmp=(101-34)/2=67/2=33.5;
B=33.5+0.5=34;
C =101-34-34=33;

n=102
tmp=102/3=34.0
A=34.0+0.5 =34
tmp=(102-34)/2=68/2=34.0;
B=34.0+0.5=34;
C =102-34-34=34;

по моему так
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.06.2013, 15:34 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
Thinker,
вторую прогу смотрел?
зачем так усложнять, когда все проще можно и без чисел с плавающей точкой
0
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
16.06.2013, 15:37 #12
Цитата Сообщение от Thinker Посмотреть сообщение
зачем так усложнять, когда все проще можно и без чисел с плавающей точкой
это не усложнение а упрощение
ни одного ветвления значит выполнятся будет быстрей
времена когда вещественная арифметика долго выполнялась прошли
если нужно чтобы три числа не были равные то можно добавить так
C++
1
2
3
4
5
if(A==B && B==C)
{
 A--;
 C++;
}
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.06.2013, 15:41 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
ни одного ветвления
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main()
{
    int a = 5, x, y, z, ost;
    x = y = z = a / 3;
    ost = a % 3;
    x += !!ost;
    y += !(ost & 1);
    cout << a << " = " << x << " + " << y << " + " << z;
    return 0;
}
1
darkstalker739
17 / 17 / 2
Регистрация: 16.06.2013
Сообщений: 94
16.06.2013, 15:44  [ТС] #14
Цитата Сообщение от lazybiz Посмотреть сообщение
#include <iostream>
using namespace std;
int main()
{
* * int a = 80;
* * cout << a << " = " << a / 3 << " + " << a / 3 << " + " << a / 3 + a % 3;
* * return 0;
}
Значение должен вводить пользователь. Оно может быть любым.

Цитата Сообщение от ValeryS Посмотреть сообщение
tmp=(double)n/3.0;
Плавающей точки также быть не должно. Только целочисленные вычисления т.е. int онли
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
16.06.2013, 15:45 #15
Цитата Сообщение от darkstalker739 Посмотреть сообщение
Значение должен вводить пользователь. Оно может быть любым.
Вводи любое, кто ж тебе мешает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2013, 15:45
Привет! Вот еще темы с ответами:

Можно ли представить данное число в виде произведения трех последовательных натуральных чисел - 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...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
16.06.2013, 15:45
Ответ Создать тему
Опции темы

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