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