Составить функцию подсчета всех возможных сумм чисел в строке - C (СИ)
Формулировка задачи:
Составить функцию подсчета всех возможных сумм чисел в строке.
Пример:
3 ->количество элементов
2 3 4
Вывод: 2 3 4 5 6 7 9
Решение задачи: «Составить функцию подсчета всех возможных сумм чисел в строке»
textual
Листинг программы
#include <stdio.h>
int pow2(int n)
{
return (n==0)?1:2*pow2(n-1);
}
void AllSums(int *Arr, int n)
{
int c,b,i,s,j;
b=pow2(n)-1;
for (i=1; i<=b; i++)
{
c=i;
s=0;
for (j=0; j<n; j++)
{
if (c%2)
{
printf("%d ",Arr[j]);
s+=Arr[j];
}
c=c/2;
}
printf("S=%d\n",s);
}
return;
}
int main(int argc, char *argv[])
{
int Arr[8]={2,3,4,6,1,-1,7,11};
AllSums(Arr,8);
system("PAUSE");
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
- В функции main создается массив Arr размером 8, инициализированный значениями {2,3,4,6,1,-1,7,11}.
- Функция AllSums вызывается с аргументами Arr и 8.
- В функции AllSums создаются следующие переменные:
- c - для хранения остатка от деления на 2 текущего числа в двоичном представлении числа n.
- b - для хранения количества чисел, которые могут быть представлены в двоичной системе в пределах n.
- i - для хранения текущего числа в двоичной системе.
- s - для хранения суммы чисел, которые имеют ненулевой остаток при делении на 2.
- j - для хранения индекса текущего числа в массиве Arr.
- Используя цикл for, в функции AllSums перебираются все возможные числа в двоичной системе от 1 до n.
- Для каждого числа i в двоичной системе выполняется следующее:
- c устанавливается равным i.
- с помощью цикла for перебираются все числа от 0 до n-1.
- если остаток от деления c на 2 ненулевой, то:
- число c выводится на экран.
- к переменной s прибавляется соответствующее число из массива Arr.
- c делится на 2.
- После завершения цикла for для текущего числа i выводится на экран значение переменной s.
- В конце функции main вызывается функция system(
PAUSE), чтобы приостановить выполнение программы до нажатия клавиши. - В конце функции main возвращается значение EXIT_SUCCESS, указывающее на успешный конец работы программы.