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

Перебор возможных значений для трёх чисел - C++

Восстановить пароль Регистрация
 
mansp
18 / 18 / 0
Регистрация: 07.11.2010
Сообщений: 136
09.04.2012, 22:43     Перебор возможных значений для трёх чисел #1
Доброго времени суток.
Нужно перебрать все возможные значения трёх чисел. их сума равна 1. перебрать нужно с шагом 0,01, например 0,01 0,01 0,98 .
Заранее благодарен за помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2012, 22:43     Перебор возможных значений для трёх чисел
Посмотрите здесь:

C++ Перебор всех возможных способов размещения n различных предметов по m различным ящикам
Реализовать перебор всех возможных IP-адресов (С++) C++
Перебор всех возможных подмножеств множества целых чисел C++
написать программу кальуклятор, для вычисления по запросу пользователя одной формулы из трёх возможных C++
перебор и вывод всех возможных сочетаний C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
10.04.2012, 01:18     Перебор возможных значений для трёх чисел #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main()
{
 float i,j,k;
 for (i=0;i<=100;i++)
  for (j=0;j<=100-i;j++)
   {
    k=100-i-j;
    std::cout<<i/100<<' '<<j/100<<' '<<k/100<<std::endl;
   }
 system("pause");
 return 0;
}
Добавлено через 52 минуты
только начальные значения 0 надо, а не 1. Исправил.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,161
Завершенные тесты: 1
10.04.2012, 08:43     Перебор возможных значений для трёх чисел #3
А почему бы не сразу с шагом 0.01
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 int main()
{
 float i,j,k;
 for (i=0;i<=1.;i+=0.01)
  for (j=0;j<=1.0-i;j+=0.01)
   {
    k=1.0-i-j;
    std::cout<<i<<' '<<j<<' '<<k<<std::endl;
   }
 system("pause");
 return 0;
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
10.04.2012, 09:41     Перебор возможных значений для трёх чисел #4
Цитата Сообщение от zss Посмотреть сообщение
А почему бы не сразу с шагом 0.01
потому, что такое представление неточно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
10.04.2012, 10:12     Перебор возможных значений для трёх чисел #5
Nameless One, но ведь в печати

C++
1
std::cout<<i/100<<' '<<j/100<<' '<<k/100<<std::endl;
тоже родятся неточные числа. Какая разница, сразу их рожать, или в момент печати?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
10.04.2012, 15:39     Перебор возможных значений для трёх чисел #6
Цитата Сообщение от Evg Посмотреть сообщение
Nameless One, но ведь в печати

C++
1
std::cout<<i/100<<' '<<j/100<<' '<<k/100<<std::endl;
тоже родятся неточные числа. Какая разница, сразу их рожать, или в момент печати?
Неточность меньше
ЗЫ сначала с шагом 0.01 делал
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
10.04.2012, 15:50     Перебор возможных значений для трёх чисел #7
Я всё к тому, что логичнее вместо i/100 печатать что-то типа cout << "0." << i. Т.е. плавающее число именно рисовать (с учётом эффектов типа нужного дополнительного нуля и т.п.)

Добавлено через 57 секунд
Кстати, "i/100" работать не будет - это же цеслочисленное деление
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
10.04.2012, 15:56     Перебор возможных значений для трёх чисел #8
Цитата Сообщение от Evg Посмотреть сообщение
Кстати, "i/100" работать не будет - это же цеслочисленное деление
там вообще i, j, k были float
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
10.04.2012, 16:13     Перебор возможных значений для трёх чисел #9
Цитата Сообщение от Nameless One Посмотреть сообщение
там вообще i, j, k были float
Угу. Что-то у меня потемнение в глазах было Специально посмотрел, но почему-то увидел "int"
talis
10.04.2012, 16:18
  #10

Не по теме:

Кстати вот вопрос: по-хорошему операция деления менее эффективна, чем операция умножения на число с плавающей точкой (или это относится только к целочисленному делению?). Не лучше ли записать i * 0.01?

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.04.2012, 16:23     Перебор возможных значений для трёх чисел #11
Цитата Сообщение от Evg Посмотреть сообщение
логичнее вместо i/100 печатать что-то типа cout << "0." << i. Т.е. плавающее число именно рисовать (с учётом эффектов типа нужного дополнительного нуля и т.п.)
Я бы тоже так делал. По сути задача ни чем не отличается от перебора трёх целочисленных слагаемых, дающих в сумме 100, просто тумана напустили немного.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2012, 16:50     Перебор возможных значений для трёх чисел
Еще ссылки по теме:

Перебор возможных вариантов разреза трубы C++
Организовать перебор всех возможных сочетаний C++
C++ Перебор всех значений трёх булевых переменных

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
10.04.2012, 16:50     Перебор возможных значений для трёх чисел #12
Цитата Сообщение от talis Посмотреть сообщение
Кстати вот вопрос: по-хорошему операция деления менее эффективна, чем операция умножения на число с плавающей точкой (или это относится только к целочисленному делению?). Не лучше ли записать i * 0.01?
Вопрос философский. 0.01 нельзя представить точно, в то время как 100.0 - можно. Хотя если не волнуют цифры в 7-8 знаке (или сколько там) после запятой, то умножение быстрее деления в разы
Yandex
Объявления
10.04.2012, 16:50     Перебор возможных значений для трёх чисел
Ответ Создать тему
Опции темы

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