С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
gusar
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 21
1

Используя перебор значений найти все такие целые a, b, что n=3a+5b для любого натурального n>7

27.10.2014, 15:24. Просмотров 682. Ответов 12
Метки нет (Все метки)

Помогите с задачей,пожалуйста.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2014, 15:24
Ответы с готовыми решениями:

Найти все целые числа X в диапазоне [0, M – 1], такие что X^N mod M = Y
...Напишите программу, которая найдёт все целые числа X в диапазоне , такие что...

Для заданного натурального числа n вывести все пары чисел x, y такие, что n = x^2+y^2
Нужна помощь Для заданного натурального числа n программа выводит все пары...

Дано целое число N. Найдите все такие целые числа d, что N делится на d2 и не делится на d3.
Вроде все норм работает, по крайней мере числа находит, но почему-то если ввожу...

Используя перебор значений вывести на экран в убывающем порядке все двузначные числа, в деся-тичной записи кот
Добрый день вот такая вот задача на отладку программы:используя перебор...

Найти все такие значения k, что все элементы k-го столбца матрицы содержатся в ее k-ой строке
Hайти все такие значения k, что все элементы k-го столбца матрицы содержатся в...

12
Kverter
36 / 36 / 25
Регистрация: 30.10.2013
Сообщений: 211
27.10.2014, 17:22 2
gusar, а границы есть?
0
D_in_practice
332 / 332 / 331
Регистрация: 02.10.2014
Сообщений: 666
27.10.2014, 19:17 3
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;
    do{
        cout << "Ââåäèòå n = ";
        cin >> n;
    }while(n <= 7);
    
    for (int a = 0; a <= n / 3; ++a)
        for (int b = 0; b <= n / 5; ++b)
            if (3 * a + 5 * b == n)
                cout << "3 * " << a << " + 5 * " << b << " = " << n << endl;
            
    return 0;
}
1
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4838 / 2483 / 695
Регистрация: 18.10.2014
Сообщений: 4,290
27.10.2014, 19:21 4
Цитата Сообщение от D_in_practice Посмотреть сообщение
for (int a = 0; a <= n / 3; ++a)
Я думаю что тот факт, что в постановке задачи раздельно используются термины "целый" и "натуральный", говорит о том, что отрицательные 'a' и 'b' должны быть проверены тоже.
2
D_in_practice
332 / 332 / 331
Регистрация: 02.10.2014
Сообщений: 666
27.10.2014, 19:34 5
для любого натурального n>7 сбило с пути

хотя стоп, тогда нужно смотреть вообще всю числовую ось

то есть a от - 2^32 до + 2^32 и b от - 2^32 до + 2^32
1
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,949
27.10.2014, 19:39 6
D_in_practice,
если уж на то пошло то почему a начинается с - (n / 3)
пожалуйста n=15
a=-100
b=63
3*-100+5*63=-300+315=15
прав Kverter, пределы нужны

Добавлено через 1 минуту
Цитата Сообщение от D_in_practice Посмотреть сообщение
то есть a от - 2^32 до + 2^32 и b от - 2^32 до + 2^32
а целые числа int не заканчиваются

подправил уже
1
gusar
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 21
27.10.2014, 21:52  [ТС] 7
a и b <=7
a=0;b=0
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,949
27.10.2014, 22:03 8
3*a+5*b=n;
5*b=n-3*a;
a=(n-3*b)/5;
C++
1
2
3
4
5
6
7
8
int a;
for(int b=0; b<=7;b++)
 {
   a=(n-3*b)/5;
   if(a>=0&& a<=7 && 3*a+5*b==n)
       cout<<a<<b; 
 
 }
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4838 / 2483 / 695
Регистрация: 18.10.2014
Сообщений: 4,290
27.10.2014, 22:57 9
Цитата Сообщение от ValeryS Посмотреть сообщение
3*a+5*b=n;
5*b=n-3*a;
a=(n-3*b)/5;
Ну по-первых, из предпоследнего уравнения следует 'b = (n - 3*a) / 5'. Почему здесь и в коде вы вдруг поменяли местами a и b - не ясно.

Во-вторых, заказчик (препод) может сказать, что вы слишком умничаете. Сказано перебором - значит самым что ни на есть хмурым полным перебором!!!111 (Только не понятно, зачем проверка на <= 7)

По уму (по математике), если вы уже знаете одну комбинацию (a0, b0), удовлетворяющую нашему уравнению, то все остальные комбинации будут записываться просто как (a0 - 5 * i, b0 + 3 * i). Все.

Я не знаю, удовлетворит ли автора и/или заказчика решение, основанное на этом простом наблюдении
1
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,949
27.10.2014, 23:00 10
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
зачем проверка на <= 7)
в смысле
Цитата Сообщение от ValeryS Посмотреть сообщение
a<=7
при b=0 может большое число получится
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Заказчик (препод) может сказать, что вы слишком умничаете.
я бы посылал таких преподов
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Сказано перебором - значит самым что ни на есть хмурым полным перебором
ну "это всем известно и никому не интересно"(с) Брыль "Чародеи"
0
Kverter
36 / 36 / 25
Регистрация: 30.10.2013
Сообщений: 211
28.10.2014, 10:30 11
gusar, если хочешь тупым перебором то вот
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 <stdio.h>
#include <windows.h>
#include <iostream>
#include <climits>
 
using namespace std;
 
int main()
{
    long double n;
    int max=INT_MAX;
    int min=INT_MIN;
    cout<<"Vvedite n"<<endl;
    cin>>n;
    int a,b;
for(int a=min;a<=max;a++)
    {
    for(int b=min;b<=max;b++)
        {
            if(n==(3*a+5*b)) cout<<"a="<<a<<" b="<<b<<endl;
        }
    }
system("pause");
return 0;
}
самый тупой перебор =)
min,max определишь сам-это границы.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4838 / 2483 / 695
Регистрация: 18.10.2014
Сообщений: 4,290
28.10.2014, 10:40 12
Цитата Сообщение от Kverter Посмотреть сообщение
если хочешь тупым перебором то вот
Хе, хе, хе... Запускать свой код пробовали?

1. Ваши циклы, в том виде, в котором они написаны, вызывают неопределенное поведение из-за арифметического переполнения. А на практике это - бесконечные циклы. Переменная типа 'int' всегда <= INT_MAX. Она никак не может стать больше чем INT_MAX.

2. Если значение переменных 'a' и 'b' может приближаться к INT_MIN и INT_MAX, то выражение '3*a+5*b' будет приводить к арифметическому переполнению и бессмысленному результату.

3. Отдельное недоумение вызывает множественное объявление переменных 'a' и 'b'. Зачем?

4. Также недоумение вызывает объявление переменной 'n' с типом 'long double'. Какой смысл, если все остальные вычисления делаются в типе 'int'?
0
Kverter
36 / 36 / 25
Регистрация: 30.10.2013
Сообщений: 211
28.10.2014, 12:15 13
TheCalligrapher, я все это понимаю, по этому мой первый пост был с вопросом о границах, и в примечании к коду я указал что требуется переопределить max и min. А с типом long double я натупил, признаюсь.
0
28.10.2014, 12:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2014, 12:15

Циклы: по заданному n найти все такие а и b, что n = 3а + 5b
Любое натуральное число n (n&gt; 7) можно получить по формуле n = 3а + 5b, где а...

Указать такие неотрицательные целые x, y, z, t, что n = x^2 + y^2 + z^2 + t^2
Дано натуральное число n. Указать такие неотрицательные целые x, y, z, t, что...

Найти все такие числа k, что k-я строка совпадает с k-м столбцом. Найти наибольший элемент главной диагонали
Найти все такие числа k, что k-я строка совпадает с k-м столбцом. Найти...


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

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

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