Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подбор переменных в выражении 
:(
    Опции темы
cru3l
Дата 7.11.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.8.2008

Репутация: нет
Всего: нет



есть такое выражение

a/b * c/d = x

где, x — входные данные
a,b,c,d — должна подобрать программа

как сделать оптимальнее всего?
PM MAIL   Вверх
zim22
Дата 7.11.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(cru3l @  7.11.2009,  10:33 Найти цитируемый пост)
a,b,c,d — должна подобрать программа

a = 1;
b = 1;
c = x;
d = 1;
***
можно брутфорсом подбирать
Код

for (int a = 0; a < 100000000; a++)
  for (int b = 0; b < 100000000; b++)
    for (int c = 0; c < 100000000; c++)
      for (int d = 0; d < 100000000; d++)
        if (a / b  * c / d == x ) отобразить a,b,c,d


Это сообщение отредактировал(а) zim22 - 7.11.2009, 13:24


--------------------
PM MAIL   Вверх
A5uKa
Дата 7.11.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16



Цитата

как сделать оптимальнее всего? 



Код

int b=1,c=1,d=1,a=x;


Мне кажется вы что-то недоговариваете
PM   Вверх
IKM2007
Дата 7.11.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Цитата(A5uKa @  7.11.2009,  12:20 Найти цитируемый пост)

Код

int b=1,c=1,d=1,a=x;


Мне кажется вы что-то недоговариваете 

Мне кажется, что надо найти все комбинации, а не только один. 
zim22, в твоем коде в конце вместо a / b  * c / d лучше написать (a*c)/(b*d), так как a, b, c, d типа int, и будет неправильный результат, например в случае
x = 1, a = 3, b = 2, c = 6, d = 9; будет выведено 0, а не 1. То есть так:
Код

for (int a = 0; a < 100000000; a++)
  for (int b = 0; b < 100000000; b++)
    for (int c = 0; c < 100000000; c++)
      for (int d = 0; d < 100000000; d++)
        if ((a  * c) / (b * d)== x ) отобразить a,b,c,d




--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
zim22
Дата 7.11.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(IKM2007 @  7.11.2009,  13:14 Найти цитируемый пост)
будет неправильный результат

я знаю. это псевдокод у меня был smile
Цитата(IKM2007 @  7.11.2009,  13:14 Найти цитируемый пост)
 надо найти все комбинации, а не только один. 

количество комбинаций бесконечно

Это сообщение отредактировал(а) zim22 - 7.11.2009, 14:25


--------------------
PM MAIL   Вверх
cru3l
Дата 7.11.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.8.2008

Репутация: нет
Всего: нет



блин  smile вот это я тупанул. уж слишком упростил, действительно

на самом деле задача такая

a/b * c/d = x

где, x — входные данные

и есть массив чисел например (20,20,20,21,35,36,40,50,70,85,90,88) — каждое значение можно использовать только один раз

a,b,c,d — это числа из массива взятые таким образом чтобы выражение было правильным, если конечно это возможно. 
И есть условие a+b>72 ; c+d>72

можно упростить формулу до a/b=x  (т.е. представить что c=1 и d=1) если решить задачу можно только таким образом 
 

smile 



PM MAIL   Вверх
Dov
Дата 7.11.2009, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(cru3l @  7.11.2009,  14:19 Найти цитируемый пост)
вот это я тупанул. уж слишком упростил, действительнона самом деле задача такая

Ты всё вспомнил или ещё что-то есть? Давай, лучше, выкладывай оригинальный текст задания, нечего тут в кошки-мышки играть... smile  


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
cru3l
Дата 7.11.2009, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.8.2008

Репутация: нет
Всего: нет



уже написал сам (правда на javascript, а не c++) , но теперь есть другая проблема

вот код, если кому интересно (от c++ отличается немногим)

Код

function loadpage(){
var aNumbers=new Array();
var bNumbers=new Array();
var cNumbers=new Array();
var dNumbers=new Array();
var x,y,a,b,c,d,i,j,k,z;


//заполнение массивов числами
for (i=0;i<100;i++)
{
aNumbers[i]=i;
bNumbers[i]=i;
cNumbers[i]=i;
dNumbers[i]=i;
}


x=78.578;



for (i=0;i<100;i++)
{
    for (j=0;j<100;j++)
    {
        for (k=0;k<100;k++)
        {
            for (z=0;z<100;z++)
            {
            
                
                var firstpart=(aNumbers[i]+bNumbers[j]);
                var secondpart=(cNumbers[k]+dNumbers[z]);
                var y=(aNumbers[i]/bNumbers[j])*(cNumbers[k]/dNumbers[z]);
                
                if (firstpart>72&&secondpart>72){                
                    
                    if (x==y)
                    {
                        document.write('x='+aNumbers[i]+'/'+bNumbers[j]+'*'+cNumbers[k]+'/'+dNumbers[z]+'<br>');
                    }
                
                }
            
            }
            
        }
    
    }

}

}


вообщем, как видно, x — не целое число, и перебирать его необходимо с точностью пять знаков после запятой (0,00001). если честно я так и не дождался пока программа заработает. если же работать  с целыми числами то все ок. Как можно оптимизировать скрипт, может для таких случаев есть другие алгоритмы?



Это сообщение отредактировал(а) cru3l - 7.11.2009, 19:11
PM MAIL   Вверх
cru3l
Дата 9.11.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.8.2008

Репутация: нет
Всего: нет



ну что, никаких  идей?
PM MAIL   Вверх
zim22
Дата 9.11.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(cru3l @  9.11.2009,  11:34 Найти цитируемый пост)
ну что, никаких  идей?

например для массива из 10 чисел существует 5040 уникальных комбинаций из 4 элементов(a,b,c,d)
далее необходимо отбросить те комбинации, для которых сумма 4 элементов меньше 144
для оставшихся комбинаций перебирать каждую 4! раз меняя местами элементы a,b,c,d и сравнивая с ИКС


--------------------
PM MAIL   Вверх
cru3l
Дата 9.11.2009, 16:58 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.8.2008

Репутация: нет
Всего: нет



zim22, я не случайно в своем коде выбрал именно 100 значений для массивов.
Мои массивы будут включать в себя до 100 значений. Я думаю при выборе алгоритма это важно
PM MAIL   Вверх
zim22
Дата 9.11.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(cru3l @  9.11.2009,  15:58 Найти цитируемый пост)
Я думаю при выборе алгоритма это важно

для обсуждения алгоритмов есть отдельный раздел.


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1346 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.