Bonjour!
Avant tout je tiens à préciser que je ne suis pas une bête de la programmation, et que par ailleurs, j'ai passé beaucoup de temps à essayer de résoudre mon problème avant de décider de le poster sur ce forum. Je ne m'attends à ce qu'on m'envoie un code tout prêt mais des pistes de solutions si possible. Merci d'avance!
Voici mon problème:

J’ai une table de données d’ouvriers avec, entre autres, 2 champs : « ID » de l’ouvrier et « Coefficient » attribué à l’ouvrier.
Les coefficients peuvent prendre des valeurs décimales entre 0 et 1.77
La somme de tous les coefficients donne un chiffre qu’on appelle « Nb_Superviseurs » (nombre total de superviseurs).
Je voudrais un algorithme qui parcours tous les coefficients de la table, et « répartit » les ouvriers sur les superviseurs selon les critères suivants :
1. Si « Coefficient » = 1, alors l’ouvrier correspondant est attribué à 1 superviseur qui prend en charge à 100% cet ouvrier. Et ce superviseur ne prend pas en charge d’autres ouvriers (il atteint 100% de sa capacité).
2. Si « Coefficient » > 1, alors l’ouvrier correspondant est attribué à 2 superviseurs : 1 superviseur le prend en charge à 100% et un 2ème superviseur le prend en charge à un certain taux déterminé par le coefficient (partie décimale du coefficient). Donc, le 1er superviseur ne prend pas en charge d’autres ouvriers, et le 2ème superviseur peut prendre en charge d’autres ouvriers. Par exemple : si « Coefficient » = 1.6 (1 + 0.6), alors l’ouvrier sera pris en charge par un superviseur à 100% (1) et par un autre superviseur à 60% (0.6). Donc ce dernier, peut prendre en charge un autre (ou des autres) ouvrier(s) à raison de 40% de son temps (0.4).
3. Si « Coefficient » < 1, alors l’ouvrier correspondant est attribué à 1 superviseur qui le prendra en charge au taux déterminé par le coefficient. Par exemple, si « Coefficient » = 0.8, alors l’ouvrier sera pris en charge par un superviseur à 80% (0.8).
4. Tous les ouvriers doivent être répartis sur tous les superviseurs, en sachant que le nombre des superviseurs est « Nb_Superviseurs », calculé précédemment à partir de la somme de tous les coefficients.
5. Chaque superviseur doit prendre en charge un ou des ouvriers de façon à ce que le total des coefficients des ouvriers doit être égal, tout au plus, à 1 (un superviseur ne peut pas consacrer plus que 100% de son temps pour prendre en charge les ouvriers).
6. Un superviseur peut prendre en charge autant d’ouvriers qu’il faut, de façon à ce que le total des coefficients des ouvriers doit être égal, tout au plus, à 1 (max 1).
7. Chaque superviseur doit prendre en charge au moins 1 ouvrier
8. Un ouvrier peut être pris en charge par plus qu'un superviseur

Je voudrais que le programme affiche la répartition des ouvriers sur les superviseurs en précisant les « ID » et « Coefficient » de chaque ouvrier, et en précisant le total des coefficients des ouvriers pris en charge par chacun des superviseurs

Exemple :

J’ai 10 ouvriers dont voici les données stockées dans la table :

ID Coefficient
1 1.3
2 0.8
3 1
4 0.4
5 1.6
6 1
7 0.6
8 0.5
9 1.1
10 0.7


Somme des coefficients = 9, donc je dois avoir 9 superviseurs.

NB. : Si la somme donne un chiffre décimal, alors le nombre des superviseurs = partie entière de la somme + 1

Le programme doit répartir les 10 ouvriers sur les 9 superviseurs selon les critères décrits plus haut, et afficher la répartition comme montré dans la page suivante :
Schéma d’une possibilité de répartition des 10 ouvriers sur les 9 superviseurs :


Nom : Capture d’écran 2024-04-23 184217.png
Affichages : 202
Taille : 24,5 Ko