#include #include /*Известен вес P[1], P[2], P[n] каждого из n предметов. Как разместить их в наименьшем числе рюкзаков, если грузоподъёмность каждого рюкзака равна q*/ using namespace std; //создание текстового файла store.txt из n натуральных чисел void create() { int max; //максимальное знаение веса предмета int n; //количество предметов int i; printf("nput maximum weight of objekt: max="); scanf("%d",&max); printf("input quantity of objekts: n = "); scanf("%d",&n); int *p; //массив из n случайных чисел p=new int[n+1]; srand(time(NULL)); p[0]=0; for (i=1; i<=n; i++) p[i]=rand()%max+1; FILE *g; g=fopen("store.txt","w"); for (i=1; i<=n; i++) fprintf(g,"%d\n",p[i]); fclose(g); } //проверка существовавния текстового файла dat.txt int experiment() { FILE *g; g=fopen("store.txt", "r"); if (g == NULL) return 1; fclose(g); } void rucksack() { int q; // грузоподъёмность каждого рюкзака int n; //количество предметов int m; //суммарный вес предметов в рюкзаке int k; //количество предметов в рюкзаке int s; //сумма int v; //количество рюкзаков int w; //суммарный вес всех предметов int i, j, r; bool t; //имеются нулевые элементы в сумме int min; //минимальная грузоподъёмность рюкзака v=0; w=0; FILE *g; g=fopen("store.txt","r"); n=0; int o; while(!feof(g)) {n++;fscanf(g,"%d\n",&o);} fclose(g); int *p; //массив из n случайных чисел p=new int[n+1]; g=fopen("store.txt","r"); for (i=1; i<=n; i++) fscanf(g,"%d\n",&p[i]); fclose(g); min=p[1]; for (i=2; i<=n; i++) if (p[i]>min) min=p[i]; for (i=1; i<=n; i++) w=w+p[i]; printf("Total weight of all objekts = %d\n", w); do { printf("input carrying capacity of rucksack g>=%d: q = ", min); scanf("%d",&q); } while (q0) { int *a; //массив из индексов 1..k for (k=1; k<=n; k++) { a=new int[k+1]; for (i=0; i<=k; i++) a[i]=i; j=0; r=0; while (j<=k-1) { s=0; t=true; for (i=1; i<=k; i++) {if (p[a[i]]==0) t=false; s=s+p[a[i]];} if ((s==m)&&(t==true)) { v++; fprintf(f,"В %d -й рюкзак вошли следующие предметы ",v); printf("Rucksackk %d\n", v); for (i=1; i