sunsetting

photo

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;
}

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • kazimierz.htw.pl