Найти подмножество 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, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д