Найти подмножество B мощности k такую, модуль суммы элементов которой минимальный - C (СИ)
Формулировка задачи:
В числовой множеству A мощности n найти подмножество B мощности k такую, модуль суммы элементов которой минимальный (числа в A имеют разные знаки).
Можете с С++ переписать для С?
#include <iostream>
using namespace std;
int a[100],n,a,b;
int sum(int x,int y)
{int s=0;
for(int i=x;i<=y;i++)
s+=a[i];
return s;
}
void print(int x,int y)
{
for(int i=x;i<=y;i++)
cout<<a[i]<<' ';
cout<<endl;
}
int main()
{
cin>>n>>a>>b;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
for(int j=i;j<n;j++)
if(sum(i,j)>=a&&sum(i,j)<=b)
print(i,j);
return 0;
}Решение задачи: «Найти подмножество B мощности k такую, модуль суммы элементов которой минимальный»
textual
Листинг программы
#include <stdio.h>
int a[100],n,a,b;
int sum(int x,int y)
{int s=0;
for(int i=x;i<=y;i++)
s+=a[i];
return s;
}
void print(int x,int y)
{
for(int i=x;i<=y;i++)
printf("%d \n",a[i]);
}
int main()
{
scanf("%d %d",&n,&b);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
for(int j=i;j<n;j++)
if(sum(i,j)>=a&&sum(i,j)<=b)
printf("%d %d\n",i,j);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- В начале кода объявляются массив
aразмером 100, переменныеn,aиb. - Затем определены две функции:
sum, которая вычисляет сумму элементов в заданном диапазоне, иprint, которая выводит элементы массива в заданном диапазоне. - В функции
mainсначала считываются значенияnиbс помощьюscanf. - Затем с помощью двух вложенных циклов перебираются все возможные подмножества элементов массива
a. - Для каждого подмножества вычисляется сумма с помощью функции
sumи проверяется условиеsum(i,j)>=a&&sum(i,j)<=b. - Если условие выполняется, то с помощью
printfвыводятся значенияiиj(индексы начала и конца подмножества). - В конце функции
mainвозвращается 0, что означает успешное выполнение программы.