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

задача с подбором весов - C++

Восстановить пароль Регистрация
 
nordik
Сообщений: n/a
02.12.2012, 22:57     задача с подбором весов #1
1. Имеются десять гирь весом a1, a2, ..., a10. Обозначим через ck – число способов, которыми можно составить вес k, то есть ck – это число решений уравнения a1x1 + a2x2 +...+ a10x10 = k, где xi может принимать значения 0 или 1 (i=1,..., 10). Получить с0, с1, ..., с10.


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
42
43
44
45
46
47
48
49
#include <iostream>
#include <math.h>
 
using namespace std;
 
void inputArray(int **data, int *dataLength) {
cout « "Input array length: ";
cin » *dataLength;
*data = new int[*dataLength];
for(int i = 0; i < *dataLength; i++) {
cout « "[" « i « "] = ";
cin » (*data)[i];
}
}
 
int main(int argc, char* argv[]) {
int *w, wCount, wSum;
cout « "Input weights: " « endl;
inputArray(&w, &wCount);
cout « "Input sum weight: ";
cin » wSum;
 
for (unsigned int i = 0; i < (unsigned int) (pow(2.0, 2 * wCount) + 0.1); i++) {
for (int j = wCount - 1; j >= 0; j--) {
printf("i=%d\n",i);
printf("j=%d\n",j);
printf("\n"); 
}
printf("\n"); 
}
for (unsigned int i = 0; i < (unsigned int) (pow(2.0, 2 * wCount) + 0.1); i++) {
for (int j = wCount - 1; j >= 0; j--){ 
printf ("%d",(i »2 * j) & 1);
 
}
printf("\n");
}
for (unsigned int i = 0; i < (unsigned int) (pow(2.0, 2 * wCount) + 0.1); i++) {
int tmp = 0;
for (int j = wCount - 1; j >= 0; j--) 
tmp +=((i »2 * j) & 1) * w[j];
if (tmp == wSum) {
for (int j = wCount - 1; j >= 0; j--)
if ((i »2 * j) & 1)
cout « w[j] « " ";
cout « endl;
}
}
}
вот реализация он мне сказал что зачтёт её если передалаю так что будет работать если гирю можно будет брать ещё по 2 раза каждую.

тут используются побитовые сдвиги пробегает от 00000 до 11111 неважно какое количество цифр если 0 то не берём гирю если 1 берём,а он мне подсказал что если по 2 раза берём то теперь нужно брать по 2 бита как-то 01 и 00-не берём гирьку,10-берём 1,11-берём 2.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 22:57     задача с подбором весов
Посмотрите здесь:

C++ Граф задан мартрицей весов.Нужно определить ребра с максимальным весом и удалить их
Корректировка весов C++
C++ Калькулятор мер и весов
Распределить камни в две кучи так, чтобы модуль разности весов этих двух куч был минимальным C++
C++ Разработка класса "Старинная русская система весов" (пуды, фунты, золотники)
Расчет весов для точек C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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