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

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

Войти
Регистрация
Восстановить пароль
 
deepLulz
4 / 4 / 0
Регистрация: 12.02.2012
Сообщений: 46
#1

Поиск всех возможных A и B из формулы - C++

10.03.2012, 13:25. Просмотров 571. Ответов 9
Метки нет (Все метки)

Есть задание: любое натуральное число N (N > 7). Исходя из формулы N = 3a+5b получить все возможные A и B .
Решил я это следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
 
main(){
    int n, a, b;
    printf("Enter N (N > 7) = ");
    do{
        scanf("%i",&n);
        if(n <= n){
            printf("Incorrect number. Please re-enter N (N > 7) = ");
        }
    } while(n <= 7);
    for (b = 1; b < n; b++){
        for(a = 1; a < n; a++){
            if((a == (n-5*b)/3) && ((n-5*b)%3 == 0)){
                printf("\nA = %i B = %i",a,b);
            }
        }
    }
    getch();
    return 0;
}
Но преподаватель сказал, что в циклах for нужно крутить не до N, а в них как то использовать формулу, тогда можно будет вообще избежать условие if и значительно сократить код. Уже 2й день думаю как можно реализовать, но пока безуспешно. Может кто подскажет что?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2012, 13:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск всех возможных A и B из формулы (C++):

написать программу кальуклятор, для вычисления по запросу пользователя одной формулы из трёх возможных - C++
перед началом работы программа формирует информационное сообщение, в котором перечисляются формулы,которые могут быть вычеслены, а также...

Поиск всех возможных путей в графе по отдельности - C++
Здравствуйте. Задача такова: Есть граф кодовых пересечений ГКП (3,2,1) (на рисунке). Параметры n - длина кода, k - основание кода, r -...

Нахождение всех возможных путей - C++
дана матрица, нужно с 1,1(Start) обоити всеми возможными путями к А,А(Finish). здвигаться можно так если находимся в (х,у) : (х+1,у);...

Сортировка всех возможных комбинаций 4 из 8 - C++
Задача состоит в том, что бы сложить 4 элемента массива, который состоит из 8 элементов, во всех возможных комбинациях int array; //...

Перебор и вывод всех возможных сочетаний - C++
Итак,здравствуйте форумчане. Привела меня к вам интересная задачка. Вводится слово,заранее не известно количество букв необходимо...

Организовать перебор всех возможных сочетаний - C++
Затрудняюсь с алгоритмом. Как можно организовать перебор всех возможных группировок? Имеется несколько романов одного писателя. Для...

9
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
10.03.2012, 14:08 #2
Цитата Сообщение от deepLulz Посмотреть сообщение
Но преподаватель сказал, что в циклах for нужно крутить не до N
В данной ситуации преподаватель прав:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <conio.h>
 
main(){
    int n, a, b;
    printf("Enter N (N > 7) = ");
    do{
        scanf("%i",&n);
        if(n <= 7){
            printf("Incorrect number. Please re-enter N (N > 7) = ");
        }
    } while(n <= 7);
    for (b = 1; b <= n-3; b++){
        a=(n-5*b)/3;
        if(3*a+5*b==n && a>0)
            printf("\nA = %i B = %i",a,b);    
    }
    getch();
    return 0;
}
1
deepLulz
4 / 4 / 0
Регистрация: 12.02.2012
Сообщений: 46
10.03.2012, 14:14  [ТС] #3
valeriikozlov, почему до n - 3? И можно как то совсем избавиться от if?
Так же по заданию сказано, что нужно использовать вложенные циклы, извиняюсь, что забыл это указать в теме.
1
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
10.03.2012, 14:37 #4
Цитата Сообщение от deepLulz Посмотреть сообщение
valeriikozlov, почему до n - 3?
потому что судя по Вашему коду a и b должны быть не менее 1.

Цитата Сообщение от deepLulz Посмотреть сообщение
И можно как то совсем избавиться от if?
Так же по заданию сказано, что нужно использовать вложенные циклы, извиняюсь, что забыл это указать в теме.
можно (бредовый вариант - но совпадает с условием):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <conio.h>
 
main(){
    int n, a, b;
    printf("Enter N (N > 7) = ");
    do{
        scanf("%i",&n);
        if(n <= 7){
            printf("Incorrect number. Please re-enter N (N > 7) = ");
        }
    } while(n <= 7);
    for (b = 1; b <= n-3; b++){
        for(a=(n-5*b)/3; 3*a+5*b==n && a<(n-5*b)/3+1 && a>0; a++)
            printf("\nA = %i B = %i",a,b);    
    }
    getch();
    return 0;
}
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.03.2012, 15:35 #5
Цитата Сообщение от valeriikozlov Посмотреть сообщение
потому что судя по Вашему коду a и b должны быть не менее 1.
Нет. A и B могут быть равны и 0, и - 1, и -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
#include <stdio.h>
#include <conio.h>
 
int main()
{
    int n = 0;
        int a = 0;
    int b = 0;
    
        printf("Enter N (N > 7) = ");
    
        scanf("%i",&n);
        
    do
    {            
        for ( a = 0; a < 100; a ++)
        {   
            b = ( n - 3 * a ) / 5;
            if ( 3*a + 5*b == n & b > 0 ) 
                    printf( "a = %i b = %i \n \n", a, b );
        }
        
    } while ( 3*a + 5*b == n );
    
        getch();
        return 0;
}
Например N = 190
1
Миниатюры
Поиск всех возможных A и B из формулы  
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.03.2012, 16:07 #6
Да и вообще автор темы не уточнил какими должны быть a и b, может даже отрицательными, например для n = 8 будет верно a = 6, b = -2

Добавлено через 5 минут
Например если не проверять, что a или b больше или равно нулю:
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
    int n, a, b;
    
        printf("Enter N (N > 7) = ");
        scanf("%i",&n);
        
    do
    {            
        for ( a = -100; a < 100; a ++)
        {   
            b = ( n - 3 * a ) / 5;
            if ( 3*a + 5*b == n ) 
            printf( "a = %i b = %i \n \n", a, b );
        }
        
    } while ( 3*a + 5*b == n );
    
        getch();
        return 0;
}
Получится гораздо более широкий диапазон решений ограниченный в этом коде лишь значением а в цикле for

Добавлено через 15 минут
Также можно сделать проверку на n > 7
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
    int n, a, b;
    
        printf("Enter N (N > 7) = ");
    
        scanf("%i",&n);
        
    do {             
        for ( a = -100; a < 100; a ++) {    
            b = ( n - 3 * a ) / 5;
            if ( 3*a + 5*b == n & n > 7 ) { printf( "a = %i b = %i \n \n", a, b ); } // в условии проверка n > 7
            else {goto label;} // иначе выходим из цикла к метке label
        }
        
    } while ( 3*a + 5*b == n );
    
    label:
    printf( "N men'she 8 \n\n game over..." ); // надо было ввести не меньше 8
        
        getch();
        return 0;
}
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.03.2012, 18:55 #7
В предыдущем коде была ошибка, вот исправленный код, если н меньше 8, то пишет "не меньше 8 геймовер", если все правильно - "ю вин"
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
    int n, a, b;
    
        printf("Enter N (N > 7) = ");
    
        scanf("%i",&n);
        
    do
    {            
        for ( a = -100; a < 100; a ++)
        {   
            b = ( n - 3 * a ) / 5;
            if ( n > 7) 
            {
                if ( 3*a + 5*b == n ) { printf( "a = %i b = %i \n \n", a, b );  }
            }
            
            else { goto label1; }
            
        }
        
    } while ( 3*a + 5*b == n );
    
    goto label2;
    
    label1:
    printf( "N men'she 8 \n\n game over" );goto label3;
    
    label2:
    printf( "you win!" );
    
    label3:
            
        getch();
        return 0;
}
1
deepLulz
4 / 4 / 0
Регистрация: 12.02.2012
Сообщений: 46
11.03.2012, 19:01  [ТС] #8
programina, спасибо, но использовал из твоего кода лишь алгоритм. Может кому пригодиться:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <conio.h>
 
main(){
    int n, a, b;
    printf("Enter N (N > 7) = ");
    do{
        scanf("%i",&n);
        if(n <= n){
            printf("Incorrect number. Please re-enter N (N > 7) = ");
        }
    } while(n <= 7);
    do {
        for ( a = 0; a < 100; a ++){
            b = ( n - 3 * a ) / 5;
            if ( 3*a + 5*b == n )
                printf( "A = %i B = %i \n \n", a, b );
        }
 
    } while ( 3*a + 5*b == n );
    getch();
    return 0;
}
1
neske
1501 / 868 / 84
Регистрация: 26.03.2010
Сообщений: 2,973
11.03.2012, 19:04 #9
main должна возвращать int,
C++
1
int main() {
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.03.2012, 20:31 #10
Цитата Сообщение от programina Посмотреть сообщение
Да и вообще автор темы не уточнил какими должны быть a и b, может даже отрицательными
по секрету скажу: в этом случае вариантов А и В бесконечное множество. Замучаетесь выводить результат )
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2012, 20:31
Привет! Вот еще темы с ответами:

Алгоритм перебора всех возможных значений - C++
Здравствуйте, суть задачи алгоритма состоит в поиске всех возможных сочетаний букв в слове. Параметром в функцию передаются вектор,...

Реализовать перебор всех возможных IP-адресов (С++) - C++
Реализовать перебор всех возможных IP-адресов, начиная с 0.0.0.0, заканчивая 255.255.255.0. (проще говоря перебор всех возможных комбинаций...

Перебор всех возможных сочетаний заданных переменных - C++
Чтобы не создавать новую тему, напишу здесь. Есть несколько переменных - около 20, часть переменных может иметь 2 значения, часть - три...

Выведение всех возможных маршрутов в неориентированном графе - C++
Помогите пожалуйста составить программу для выведения всех возможных маршрутов в неориентированном графе


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

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

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