Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 55
1

Пол-ль вводит число от 50 до 100. Программа раскладывает число на сумму 4-х квадратов, всеми возможными способами

27.06.2013, 14:57. Показов 771. Ответов 7
Метки нет (Все метки)

Пример: 39 = 1^2+2^2+3^2+5^2.

Не получается написать код для этой задачи Помогите пож разобраться
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2013, 14:57
Ответы с готовыми решениями:

Разбейте заданное число на 2 множителя всеми возможными способами
Разбиения, отличающиеся лишь порядком множителей, разными не считаются.

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

Пользователь вводит число >100, программа выводит сумму цифр в числе и их среднеарифметическое
Доброго времени суток.Мне нужна ваша помощь с решением задачи. вот задача: Пользователь вводит...

Пользователь вводит с клавиатуры число от 0 до 100, программа выводит число буквами
Пользователь вводит с клавиатуры число от 0 до 100, программа выводит число в буквенном формате

7
Почетный модератор
Эксперт С++
5845 / 2855 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
27.06.2013, 16:42 2
Поскольку нам известно, что квадратов должно быть ровно четыре, это облегчает дело.
Елки! Квадратов ведь только нужно!
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 x = 39;
 
for(int i1=0; i1<x; i1++)
  for(int i2=0; i2<x; i2++)
    for(int i3=0; i3<x; i3++)
      for(int i4=0; i4<x; i4++)
        if( ( i1*i1 + i2*i2 + i3*i3 + i4*i4 ) == x )
          {
          cout.width(4);
          cout << i1 << ' ' << i2 << ' ' << i3 << ' ' << i4 << endl;
          }
 
cin.ignore();
return 0;
1
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 55
27.06.2013, 17:00  [ТС] 3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Поскольку нам известно, что квадратов должно быть ровно четыре, это облегчает дело.
Елки! Квадратов ведь только нужно!
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 x = 39;
 
for(int i1=0; i1<x; i1++)
  for(int i2=0; i2<x; i2++)
    for(int i3=0; i3<x; i3++)
      for(int i4=0; i4<x; i4++)
        if( ( i1*i1 + i2*i2 + i3*i3 + i4*i4 ) == x )
          {
          cout.width(4);
          cout << i1 << ' ' << i2 << ' ' << i3 << ' ' << i4 << endl;
          }
 
cin.ignore();
return 0;
а если я хочу чтобы работали числа только от 50 до 100? как мне ограничить диапазон?
0
15 / 15 / 8
Регистрация: 25.06.2013
Сообщений: 63
27.06.2013, 18:14 4
если только перебором сделать:

C++
1
2
3
4
5
6
7
8
9
10
    int n;
    cout << "Введите число от 50 до 100: ";
    cin >> n;
 
    for (int a = 1; a <= 10; a++)
        for (int b = a; b <= 10; b++)
            for (int c = b; c <= 10; c++)
                for (int d = c; d <= 10; d++)
                    if (a*a + b*b + c*c + d*d == n)
                        cout << n << " = " << a << "^2 + " << b << "^2 + " << c << "^2 + " << d << "^2" << endl;
39 = 1^2 + 1^2 + 1^2 + 6^2
39 = 1^2 + 2^2 + 3^2 + 5^2
0
166 / 165 / 46
Регистрация: 10.10.2010
Сообщений: 725
27.06.2013, 19:25 5
изменить в циклах значения подбора.
вместо 0 поставить начало, т.е 50, а на конец сделать проверку, если число больше 100, то ставить конец - 100, если меньше, то число.
Можно еще запилить проверку, чтобы не выводилось
1 + 25 + 9 + 4
4 + 9 + 25 + 1
и так далее,проверку на повторяемость
0
Эксперт С++
4259 / 2233 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.06.2013, 19:28 6
а можно вообще завести массив (аналог решета Эратосфена) с квадратами чисел и работать только с ними, выкинутся многие ненужные проверки.
2
Почетный модератор
Эксперт С++
5845 / 2855 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
28.06.2013, 13:00 7
Цитата Сообщение от Rexer Посмотреть сообщение
Можно еще запилить проверку, чтобы не выводилось
1 + 25 + 9 + 4
4 + 9 + 25 + 1
и так далее,проверку на повторяемость
Зачем? Когда указано
Цитата Сообщение от sancho1996 Посмотреть сообщение
всеми возможными способами

Цитата Сообщение от Thinker Посмотреть сообщение
выкинутся многие ненужные проверки
Я лишь показал путь.
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
36
37
38
39
40
41
#include<iostream>
using namespace std;
int main()
{
 
int x = 39;
int count = 0;
 
for(int i1=0; i1*i1<=x; i1++)
  for(int i2=0; i2*i2<=x; i2++)
    for(int i3=0; i3*i3<=x; i3++)
      for(int i4=0; i4*i4<=x; i4++)
        {
        count++;
        if( ( i1*i1 + i2*i2 + i3*i3 + i4*i4 ) == x )
          {
          cout.width(4);
          cout << i1 << ' ' << i2 << ' ' << i3 << ' ' << i4 << endl;
          }
        }
cout << "COUNT=" << count << endl << endl;
 
count = 0;
for(int i1=0; i1<=x; i1++)
  for(int i2=0; i2<=x; i2++)
    for(int i3=0; i3<=x; i3++)
      for(int i4=0; i4<=x; i4++)
        {
        count++;
        if( ( i1*i1 + i2*i2 + i3*i3 + i4*i4 ) == x )
          {
          cout.width(4);
          cout << i1 << ' ' << i2 << ' ' << i3 << ' ' << i4 << endl;
          }
        }
cout << "COUNT=" << count << endl;
 
 
cin.ignore();
return 0;
}
Пол-ль вводит число от 50 до 100. Программа раскладывает число на сумму 4-х квадратов, всеми возможными способами



@Thinker, с удовольствием погляжу на вариант с массивом. А-то я не совсем понял как его сюда применить.
0
Эксперт С++
4259 / 2233 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.06.2013, 21:18 8
ну, массив по сути не нужен здесь, можно немного оптимизировать вариант от iv-a.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<cmath>
int main()
{
    int n = 100, bound;
    cin >> n;
    bound = sqrt((double)n);
    for (int a = 1; a <= bound; ++a)
        for (int b = a; b <= bound; ++b)
            for (int c = b; c <= bound; ++c)
                for (int d = c; d <= bound; ++d)
                    if (a*a + b*b + c*c + d*d == n)
                        cout << n << " = " << a << "^2 + " << b << "^2 + " << c << "^2 + " << d << "^2" << endl;
    return 0;                        
}
усовершенствовать эту задачу можно, но пока не хочется, думалка спит
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2013, 21:18

Редактирование xls всеми возможными способами
обычно я открывал файл через winrar, распаковывал содержимое и редактировал то что мне надо и вот...

Задать всеми возможными способами бинарное отношение
Помогите пожалуйста :cry: Задать всеми возможными способами бинарное отношение p на множестве...

Перебрать всеми возможными способами слова строки
Есть строка слов (разделённых пробелами естественно), нужно получить уникальные строки со всеми...

Задать указанные графы всеми возможными способами
Задать указанные графы всеми возможными способами.

Вывести время и дату всеми возможными способами
Вывести текущую дату, время, год, квартал, месяц, день года и т.д. (стараясь использовать все...

Выдать данную зарплату всеми возможными способами.
Даны купюры 1$,2$,5$,10$ ,их кол-во неограниченно. Выдать данную зарплату всеми возможными...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru