1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
   |  
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
 
typedef struct {
  uint32_t nbJours;
  uint32_t *planning;
 
  uint32_t nbGroupes;
  uint8_t *dejaVu;
} inputStruct;
 
uint32_t minDays(inputStruct *input);
 
int main(){
  uint32_t i;
  uint32_t result;
 
  inputStruct input;
 
  printf("Entrer nbJours et nbGroupes: ");
  scanf("%u%u", &input.nbJours, &input.nbGroupes);
  printf("\nnbJours %u, nbGroupes %u\n", input.nbJours, input.nbGroupes);
  if((input.nbJours < 1) || (input.nbJours > 100)){
    printf("[ERR] 1 <= nbJours(%u) <= 100\n", input.nbJours);
    return -1;
  }
  if((input.nbGroupes < 1) || (input.nbGroupes > input.nbJours)){
    printf("[ERR] 1 <= nbGroupes(%u) <= nbJours(%u)\n", input.nbGroupes, input.nbJours);
    return -1;
  }
 
  input.planning = malloc(sizeof(uint32_t) * input.nbJours);
  input.dejaVu = malloc(sizeof(uint8_t) * input.nbGroupes);
  if((input.planning == NULL) || (input.dejaVu == NULL)){
    printf("[ERR] memory allocation failed\n");
    return -1;
  }
  printf("Init...\n");
  for(i = 0; i < input.nbJours; i++){
    printf("Entrer Groupe pour jour %u: ", i+1);
    int groupe;
    scanf("%u", &groupe);
    if((groupe < 1) || (groupe > input.nbGroupes)){
      printf("[ERR] Le Groupe n'est pas compris entre 1 et %u\n", input.nbGroupes);
      i--;
    } else {
      input.planning[i] = groupe;
    }
  }
  for(i = 0; i < input.nbGroupes; i++){
    input.dejaVu[i] = 0;
  }
 
  printf("Process...\n"); 
  result = minDays(&input);
  if(result >= input.nbGroupes){
    printf("Result: %u\n", result);
  } else {
    printf("[ERR] Result: les groupes n'ont pas tous été plannifiés\n");
  }
 
  free(input.dejaVu);
  free(input.planning);
  printf("End\n");
 
  return 0;
}
 
uint32_t minDays(inputStruct *input){
  uint32_t counter = 0;
  uint32_t indexNbJours = 0;
  uint32_t indexDejaVu;
  uint8_t *ptrDejaVu;
 
  uint32_t *planning = input->planning;
  uint8_t *dejaVu = input->dejaVu;
 
  uint32_t nbJours = input->nbJours;
  uint32_t nbGroupes = input->nbGroupes;
 
  while(indexNbJours < nbJours){
    //printf("indexNbJours: %u\n", indexNbJours);
    indexDejaVu = planning[indexNbJours]-1;
    //printf("indexDejaVu: %u\n", indexDejaVu);
    ptrDejaVu = &dejaVu[indexDejaVu];
    if(*ptrDejaVu == 0){
      *ptrDejaVu = 1;
      counter++;
      if(counter == nbGroupes){
        indexNbJours++;
        //printf("Result: %u [OK]\n", indexNbJours);
        return indexNbJours;
      }
    }
    indexNbJours++;
  }
 
  //printf("[ERR] Result: %u\n", counter);
  return counter; // erreur : retourne le nombre de groupes planfiés
} | 
Partager