sunsetting
witam
szukam programu/kalkulatora lub funkcji w excelu
jak zrobi tak eby majc np 15 rnych liczb wpisa je i eby mi ukazao wszystkie moliwoci sum tych liczb niezalenie czy suma skada si z dwch liczb czy z jedenestu liczb czy czterech. poprostu wszystkie moliwoci sum danych liczb czyli po kolei np:
1liczba +2liczba, 1liczba +3liczba, 1liczba +4liczba, ... , 1liczba+15liczba,
2+3, 2+4, 2+5, ..., 2+15,
.
.
.
13 +14, 13+15,
14 +15,
potem np
1+2+3=
1+2+3+4+5+6+7+8+15=
5+8+12+14=
itp itd..
http://www.sendspace.com/file/498q9a
O co takiego chodzi?
Nieoptymalne (mona liczy sum w trakcie przechodzenia kolejnej sumy - w funkcji next), ale dziaa:
Kod:
#include <vector>
#include <iostream>
#include <algorithm>
/**
\brief next binary number
\param counter_mask[in,out] binary representation (least significant bit at index 0)
\return overflow (11...1 -> 00...0) encountered
*/
bool next(std::vector<bool>& counter_mask)
{
size_t c = 0;
for(; c < counter_mask.size(); ++c)
{
counter_mask[c].flip();
if(counter_mask[c])
break;
}
return c != counter_mask.size();
}
/**
\brief prints binary representation
*/
void print(std::ostream& os, const std::vector<bool>& counter_mask)
{
for(size_t i = 0; i < counter_mask.size(); ++i)
os << (counter_mask[i] ? '1' : '0');
}
/**
\return sum all of numbers[n] where counter_mask[n] is true
*/
int sum(const std::vector<bool>& counter_mask, const std::vector<int>& numbers)
{
int suma = 0;
for(size_t i = 0; i < counter_mask.size(); ++i)
{
if(counter_mask[i])
suma += numbers[i];
}
return suma;
}
int main(int argc, char *argv[])
{
std::vector<int> numbers;
std::transform(argv + 1, argv + argc, std::back_inserter(numbers), atoi);
std::vector<bool> counter_mask(numbers.size());
if(!numbers.empty())
do
{
print(std::cout, counter_mask);
std::cout << " - " << sum(counter_mask, numbers);
std::cout << std::endl;
} while(next(counter_mask));
return 0;
}