Vous êtes sur la page 1sur 8

École Supérieure d’Économie Numérique Département : TSI Signature de

l’enseignant
Matière : Problem
Session : S1-P surveillant
solving Documents :

Date d’examen : Durée :1h Nbr pages : 8


CIN : _____________________________ Année d’étude : 20/21 Salle :______

Nom : ____________________________ Signature de


Code Réservé à l’administration : l’étudiant
Prénom : __________________________ __________________________

Code Réservé à l’administration


___________________________

Problème 1 :
Completez le code c suivant afin de résoudre le Problème « Bear and Elections ».

A. Bear and Elections


Limak est un ours qui désire le pouvoir et l'adoration. Il veut gagner les prochaines
élections et régner sur le pays des ours.

Il y a n candidats, y compris Limak. Nous savons combien de citoyens vont voter pour
chaque candidat. Maintenant, le i-ième candidat obtiendrait ai voix. Limak est le candidat
numéro 1. Pour gagner aux élections, il doit obtenir strictement plus de voix que tout
autre candidat.

La victoire étant plus importante que tout le reste, Limak a décidé de tricher. Il va voler
les votes de ses adversaires en soudoyant certains citoyens. Pour corrompre un citoyen,
Limak doit lui donner un bonbon - les citoyens sont des ours et les ours aiment les
bonbons. Limak n'a pas beaucoup de bonbons et se demande : combien de citoyens doit-il
soudoyer ?
Input
La première ligne contient un seul entier n (2 ≤ n ≤ 100) - nombre de candidats.
La deuxième ligne contient n entiers séparés par des espaces a1, a2, ..., an (1 ≤ ai ≤ 1000) -
nombre de votes pour chaque candidat. Limak est le candidat numéro 1.

Page 1/8
Notez qu'après le pot-de-vin, le nombre de votes pour certains candidats peut être nul ou
supérieur à 1000.
Output
Imprimez le nombre minimum de citoyens que Limak doit corrompre pour avoir
strictement plus de voix que tout autre candidat.
Note

Dans le premier échantillon, Limak a 5 voix. Une des façons d'obtenir la victoire est de
soudoyer 4 citoyens qui veulent voter pour le troisième candidat. Le nombre de voix serait
alors de 9, 1, 7, 2, 8 (Limak aurait 9 voix). Alternativement, Limak pourrait voler
seulement 3 voix du troisième candidat et 1 voix du deuxième candidat pour obtenir la
situation 9, 0, 8, 2, 8.

Dans le deuxième échantillon, Limak volera 2 voix à chaque candidat. La situation sera 7,
6, 6, 6.

Dans le troisième échantillon, Limak est un gagnant sans avoir soudoyé aucun citoyen.

Page 2/8
#include <stdio.h>

int main (void) {


……………………………………………………………………………………………………………………………………………………
………………………………………………………………………………(1)……………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………………
………

scanf("%d", …………………………………………(2)……………………………………………);

for(………………………………………………………(3)…………………………………………………………………………)

{ scanf("%d", &sec[i]); }

for(i=1; i<num; i++) {


if(sec[0]==sec[i]) {
flag++;
sec[0]++;
}
Else if(………………………………………………………(4)…………………………………………)
{
int temp=sec[i]-sec[0];

if(……………………………(5)……………………………………………………)
flag+=((temp/2)+1);
else flag+=(temp/2);

…………………………………(6)…………………………+=(flag-sec[0]);
}
}

return ……………………………………………(7)………………………………………………;
}

Page 3/8
Problème 2 :
Completez le code c suivant afin de résoudre le Problème « Bit++».

B. Bit++
Le langage de programmation classique de Bitland est Bit++. Ce langage est si
particulier et compliqué.

Le langage est si particulier qu'il ne possède qu'une seule variable, appelée x.


Il existe également deux opérations :

• L'opération ++ augmente la valeur de la variable x de 1.


• L'opération -- diminue la valeur de la variable x de 1.
Une instruction dans le langage Bit++ est une séquence, composée
d'exactement une opération et d'une variable x. L'instruction est écrite sans
espace, c'est-à-dire qu'elle ne peut contenir que les caractères "+", "-", "X".
Exécuter une instruction signifie appliquer l'opération qu'elle contient.

Un programme en Bit++ est une séquence d'instructions, chacune d'entre


elles devant être exécutée. Exécuter un programme signifie exécuter toutes
les instructions qu'il contient.

On vous donne un programme en langage Bit++. La valeur initiale de x est 0.


Exécutez le programme et trouvez sa valeur finale (la valeur de la variable
lorsque ce programme est exécuté).

Entrée
La première ligne contient un seul nombre entier n (1 ≤ n ≤ 150) - le nombre
d'instructions du programme.

Les n lignes suivantes contiennent chacune une instruction. Chaque


instruction contient exactement une opération (++ ou --) et exactement une
variable x (désignée par la lettre "X"). Il n'y a donc pas d'instructions vides.
L'opération et la variable peuvent être écrites dans n'importe quel ordre.

Page 4/8
Sortie
Affiche un seul nombre entier - la valeur finale de x.

#include <stdio.h>

int main (void) {

……………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………
………………………………………………………………(1)……………………………………………………………………
……………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………
……

scanf("%d", ……………………………………(2)………………………………………………);

gets(str1);
for(…………………………………………(3)………………………………………………………… ) {
gets(………………………(4)………………………………);
for(j=0 ; j<3 ; j++) {
if(str1[j]== '+') {
……………………………………(5)……………………………………….
break;
}
else if(………………………………(6)………………………………………) {
value--;

Page 5/8
break;
}
}
}

printf("%d", …………………………………(7)…………………………………);

return ……………………………………(8)……………………;}

Problème 3 :
Completez le code c suivant afin de résoudre le Problème « Chat room».

C. Chat room
Vasya a récemment appris à taper à la machine et à se connecter à l'Internet. Il est
immédiatement entré dans un salon de discussion et a décidé de dire bonjour à tout le
monde. Vassia a tapé le mot s. On considère que Vassia a réussi à dire bonjour si plusieurs
lettres peuvent être supprimées du mot tapé de façon à obtenir le mot "bonjour". Par
exemple, si Vassia tape le mot "ahhellllloou", il sera considéré qu'il a dit bonjour, et s'il
tape "hlelo", il sera considéré que Vassia a été mal compris et qu'il n'a pas réussi à dire
bonjour. Déterminer si Vassia a réussi à dire bonjour avec le mot donné s.

Entrée
La première et unique ligne contient le mot s, que Vassia a tapé. Ce mot est composé de
petites lettres latines, sa longueur n'est pas inférieure à 1 et pas supérieure à 100 lettres.

Sortie
Si Vassia a réussi à dire bonjour, affichez "OUI", sinon affichez "NON".

Page 6/8
#include <stdio.h>

int main () {
char str1[] = "hello";

……………………………………………………………………………………………………(1)………………………………
……………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………
………
……………………………(2)………………………// lire la chaine de caratères
str2
while(str1[i] && str2[j]) {
if(str1[i]==str2[j]) {
……………………………(3)…………………………………………………
…………………………………(4)………………………………………….
}
………………………………(5)…………………………………………
}

Page 7/8
if(k==5) …………………………………………………(6)…………………………………………
else ……………………………………………(7)…………………………………………………………

return …………………………………(8)……………………………………………………;
}

Page 8/8

Vous aimerez peut-être aussi