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

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

Восстановить пароль Регистрация
 
deepLulz
 Аватар для deepLulz
4 / 4 / 0
Регистрация: 12.02.2012
Сообщений: 46
10.03.2012, 13:25     Поиск всех возможных A и B из формулы #1
Есть задание: любое натуральное число 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й день думаю как можно реализовать, но пока безуспешно. Может кто подскажет что?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2012, 13:25     Поиск всех возможных A и B из формулы
Посмотрите здесь:

Реализовать перебор всех возможных IP-адресов (С++) C++
Перебор всех возможных подмножеств множества целых чисел C++
написать программу кальуклятор, для вычисления по запросу пользователя одной формулы из трёх возможных C++
Нахождение всех возможных путей C++
Нахождение всех возможных путей для спуска с вершины матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
10.03.2012, 14:08     Поиск всех возможных A и B из формулы #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;
}
deepLulz
 Аватар для deepLulz
4 / 4 / 0
Регистрация: 12.02.2012
Сообщений: 46
10.03.2012, 14:14  [ТС]     Поиск всех возможных A и B из формулы #3
valeriikozlov, почему до n - 3? И можно как то совсем избавиться от if?
Так же по заданию сказано, что нужно использовать вложенные циклы, извиняюсь, что забыл это указать в теме.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
10.03.2012, 14:37     Поиск всех возможных A и B из формулы #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;
}
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.03.2012, 15:35     Поиск всех возможных A и B из формулы #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
Миниатюры
Поиск всех возможных A и B из формулы  
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.03.2012, 16:07     Поиск всех возможных A и B из формулы #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;
}
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.03.2012, 18:55     Поиск всех возможных A и B из формулы #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;
}
deepLulz
 Аватар для deepLulz
4 / 4 / 0
Регистрация: 12.02.2012
Сообщений: 46
11.03.2012, 19:01  [ТС]     Поиск всех возможных A и B из формулы #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;
}
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,692
11.03.2012, 19:04     Поиск всех возможных A и B из формулы #9
main должна возвращать int,
C++
1
int main() {
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2012, 20:31     Поиск всех возможных A и B из формулы
Еще ссылки по теме:

перебор и вывод всех возможных сочетаний C++
Организовать перебор всех возможных сочетаний C++
C++ Сортировка всех возможных комбинаций 4 из 8

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.03.2012, 20:31     Поиск всех возможных A и B из формулы #10
Цитата Сообщение от programina Посмотреть сообщение
Да и вообще автор темы не уточнил какими должны быть a и b, может даже отрицательными
по секрету скажу: в этом случае вариантов А и В бесконечное множество. Замучаетесь выводить результат )
Yandex
Объявления
11.03.2012, 20:31     Поиск всех возможных A и B из формулы
Ответ Создать тему
Опции темы

Текущее время: 06:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru