freesky

task_sem1_3.3

Nov 3rd, 2012
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void) {
  5.     FILE *f = fopen("books.dat", "r");
  6.     double l;
  7.     int n;
  8.     double *b;
  9.  
  10.     fscanf(f, "%lf", &l);
  11.     fscanf(f, "%d", &n);
  12.  
  13.     b = (double *)malloc(sizeof(double) * 2 * n);
  14.  
  15.     for (int i = 0; i < n; i++) {
  16.         fscanf(f, "%lf", b + i * 2);
  17.         *(b + i * 2 + 1) = i;
  18.     }
  19.  
  20.     for (int i = 0; i < n; i++)
  21.         for (int j = i + 1; j < n; j++) {
  22.             if (*(b + i * 2) > *(b + j * 2)) {
  23.                 double d, m;
  24.  
  25.                 d = *(b + j * 2);
  26.                 m = *(b + j * 2 + 1);
  27.  
  28.                 *(b + j * 2) = *(b + i * 2);
  29.                 *(b + j * 2 + 1) = *(b + i * 2 + 1);
  30.  
  31.                 *(b + i * 2) = d;
  32.                 *(b + i * 2 + 1) = m;
  33.             }
  34.         }
  35.  
  36.     double d = 0.0;
  37.     int k = 0;
  38.  
  39.     while (d < l) {
  40.         if (d + *(b + k * 2) <= l) {
  41.             d += *(b + k * 2);
  42.             k++;
  43.         }
  44.         else
  45.             break;
  46.     }
  47.  
  48.     int *num = (int *)malloc(sizeof(int) * k);
  49.     for (int i = 0; i < k; i++)
  50.         *(num + i) = (int)(*(b + i * 2 + 1) + 1);
  51.  
  52.     for (int i = 0; i < k; i++)
  53.         for (int j = i + 1; j < k; j++) {
  54.             if (*(num + i) > *(num + j)) {
  55.                 int t = *(num + i);
  56.                 *(num + i) = *(num + j);
  57.                 *(num + j) = t;
  58.             }
  59.         }
  60.  
  61.     printf("Всего можно поставить книг: %d. Номера книг (по порядку), которые влезут на полку длины %g: ", k, l);
  62.     for (int i = 0; i < k; i++)
  63.         printf("%d%c", *(num + i), ((i) == (k - 1)) ? '\n' : ' ');
  64.  
  65.     fclose(f);
  66.  
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment