Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int main(void) {
- FILE *f = fopen("books.dat", "r");
- double l;
- int n;
- double *b;
- fscanf(f, "%lf", &l);
- fscanf(f, "%d", &n);
- b = (double *)malloc(sizeof(double) * 2 * n);
- for (int i = 0; i < n; i++) {
- fscanf(f, "%lf", b + i * 2);
- *(b + i * 2 + 1) = i;
- }
- for (int i = 0; i < n; i++)
- for (int j = i + 1; j < n; j++) {
- if (*(b + i * 2) > *(b + j * 2)) {
- double d, m;
- d = *(b + j * 2);
- m = *(b + j * 2 + 1);
- *(b + j * 2) = *(b + i * 2);
- *(b + j * 2 + 1) = *(b + i * 2 + 1);
- *(b + i * 2) = d;
- *(b + i * 2 + 1) = m;
- }
- }
- double d = 0.0;
- int k = 0;
- while (d < l) {
- if (d + *(b + k * 2) <= l) {
- d += *(b + k * 2);
- k++;
- }
- else
- break;
- }
- int *num = (int *)malloc(sizeof(int) * k);
- for (int i = 0; i < k; i++)
- *(num + i) = (int)(*(b + i * 2 + 1) + 1);
- for (int i = 0; i < k; i++)
- for (int j = i + 1; j < k; j++) {
- if (*(num + i) > *(num + j)) {
- int t = *(num + i);
- *(num + i) = *(num + j);
- *(num + j) = t;
- }
- }
- printf("Всего можно поставить книг: %d. Номера книг (по порядку), которые влезут на полку длины %g: ", k, l);
- for (int i = 0; i < k; i++)
- printf("%d%c", *(num + i), ((i) == (k - 1)) ? '\n' : ' ');
- fclose(f);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment