2012-09-25 7 views
0

Actuellement en train de travailler sur un devoir qui demandera à l'utilisateur le nombre d'étudiants, calculez combien de sections sont nécessaires pour que le plus petit nombre de sections soit requis (chaque section compte 35 étudiants).Calcul en utilisant Modulus

Je suis bloqué sur la façon d'utiliser le module pour effectuer l'un des calculs (nous avons fourni un exemple du programme requis).

Voici ce que j'ai, je sais que ce n'est pas beaucoup mais même une simple idée générale serait utile.

if (stdnt % std == 0) { 
     sec = stdnt/std; 

} 
# of students # of sections standard section last section 
351    11    32    31 

Ceci est seulement une partie du programme.

Mon problème:

Je ne peux pas comprendre comment faire le calcul de sorte que s'il y a un reste de la taille de la section se rétrécit pour répondre à tous les étudiants en elle.

Par exemple L'utilisateur entre 350, il y a 35 points maximum par section, donc il y a 10 sections. Je ne peux pas comprendre comment obtenir 351 comme indiqué dans le tableau ci-dessus.

+0

Alors, quel est votre problème, exactement? – Dai

+0

Si le nombre d'élèves ne divise pas uniformément le nombre d'élèves par section, alors vous avez besoin d'une section de plus pour le reste. 'sec = stdnt/std; si (stdnt% std! = 0) ++ sec; ' – jrok

+0

une note de côté, si vous allez à/et% dans la même fonction, alors enregistrez-vous un peu d'effort et utilisez div. http://www.cplusplus.com/reference/clibrary/cstdlib/div/ –

Répondre

0

Il y a MAX_PER_SECTION (35 ici) étudiants par section au maximum. Ensuite, écrire

number_of_students = q * MAX_PER_SECTION + r 

avec 0 <= r < MAX_PER_SECTION. Si r == 0, alors q sections sont suffisantes, sinon nous avons besoin q+1. Vous pouvez obtenir ce numéro simplement par

number_of_sections = (number_of_students - 1)/MAX_PER_SECTION + 1; 

Maintenant, il reste à déterminer la meilleure répartition des élèves entre les sections, de sorte que la différence entre le nombre d'étudiants dans les plus grands et les plus petites sections est réduit au minimum. (Vous pouvez toujours faire la différence 0 ou 1.) Encore une fois, la division d'utilisation avec le reste d'écrire

number_of_students = s * number_of_sections + t 

avec 0 <= t < number_of_sections. Ensuite, nous avons besoin de t sections avec s+1 étudiants, et le number_of_sections - t sections prendra s étudiants.

Dans l'exemple

351 = 10 * 35 + 1, number_of_sections = (351 - 1)/35 + 1 

donc nous avons besoin de 11 sections et

351 = 31 * 11 + 10, 

donc nous avons besoin de 10 sections avec 32 élèves et une section avec 31.

+0

Que représentent r, q, s et t? Je ne comprends pas. –

+0

'q' est le quotient de la division' number_of_students/MAX_PER_SECTION', et 'r' est le reste de cette division. De même pour 's' et' t'. Donc 'q <= number_of_students/MAX_PER_SECTION

+0

Je ne comprends pas ce que vous avez dit ici: number_of_students = q * MAX_PER_SECTION + r avec 0 <= r

0

L'opération Modulo calcule un reste après la division. Rappelez-vous la formule

x = (x DIV n) + (x mod N)

où "x" et "n" sont des nombres entiers, "div" signifie division de nombre entier et "MOD" signifie opération modulo. De là, vous pouvez obtenir un code C:

int of_students  = 351; 
int standard_section = 35; 

int last_section  = of_students % standard_section; 
int of_sections  = of_students/standard_section; 
if(last_section != 0) ++of_sections; 
+0

Plutôt que de publier uniquement un bloc de code, veuillez * expliquer * pourquoi ce code résout le problème posé. Sans explication, ce n'est pas une réponse. –

0

Eh bien, le module vous donne le reste, si le reste est supérieur à zéro vous avez besoin d'une autre section pour les autres élèves. Par exemple, en prenant vos 351 élèves et en les divisant par le nombre d'élèves par section (35), vous obtiendrez 10 sections, puis en utilisant l'opérateur de module: 351% 35 retournera un reste de 1 et vous aurez besoin d'une section supplémentaire un étudiant.

Code conséquent pour psuedo le nombre de sections nécessaires est:

number_of_sections = 351/35 
if(351%1 > 0) number_of_sections += 1 
0
int numOfSections = numOfStudent/sizeOfSection; 

Fondamentalement cela vous donnera le nombre de sections s'il n'y a pas de reste alors vous voulez faire une instruction if pour vérifier s'il y a un reste. Si oui, ajoutez 1 à numOfSection.

if(numOfStudent % sizeOfSection != 0) 
    numOfSection++; 
Questions connexes