Background

Olympiade belge d'Informatique

Concours de raisonnement informatique et d'initiation à la programmation pour élèves du secondaire.

Un concours accessible à tous

Le concours beOI a été rendu plus accessible qu'auparavant afin que tout élève du secondaire puisse y participer sans connaissance préalable.

Aucune base nécessaire

L'épreuve éliminatoire ne comporte pas de programmation, uniquement des exercices de raisonnement informatique ne nécessitant aucune connaissance préalable. La finale comporte, elle, de la programmation, via des codes à comprendre et à compléter sur papier.

Trois catégories d'âge

Le concours comporte maintenant trois catégories selon l'année de l'élève, chacune comportant son propre classement:

Cadet
2e secondaire et inférieur
Junior
3e et 4e secondaire
Senior
5e, 6e (et 7e) secondaire
Guidage

Les candidats passant les éliminatoires se verront proposer une formation et une série d'outils leur permettant d'apprendre les bases de la programmation. Les meilleurs pourront également intégrer la formation de l'équipe nationale (beCP).

Les résultats 2020

Éliminatoire Finale
image

Éliminatoires 2020

Lieu et date

L'éliminatoire a lieu le mercredi 5 février 2020 dans votre école (démarrage entre 8h00 et 15h30) ou dans l'un des 11 centres régionaux à 14h. L'épreuve dure 75 minutes.

Types de questions

Les éliminatoires se dérouleront sur ordinateur sur la même plate-forme que l'année dernière. Vous retrouverez ci-dessous quelques exemples de questions

Résultats

Calendrier 2019-2020

  • 19 oct

    Olympiade du benelux d'informatique (bxoi)
    Nimègue, Pays-Bas

  • 5 fév

    Éliminatoire
    Détails ci-dessous

  • ?-? fév

    Formation
    Louvain-la-Neuve (?) (À définir)

  • 7 mars


  • 23 mai

    Concours de sélection pour l'ioi
    Plus d'infos sur la beCP

  • 19-26 juil

    Olympiade internationale d'informatique (ioi)
    Singapour

  • ?-? aoû

    Olympiade européenne junior d'informatique (ejoi)
    Géorgie

image

Finale 2020

Lieu et date

La finale a lieu le samedi 7 mars 2020 à Bruxelles, Avenue Franklin Roosevelt 50.
Campus du Solbosch de l'ULB, bâtiment U, entrée B, auditoire Lameere 252A.
Les finalistes sont attendus sur place à 9h15.
L'épreuve commencera à 9h30 et dure 2 heures.

Questions et solutions 2020

Énoncé/Solutions Résultats

Soyez prévenu de la prochaine olympiade

Exemples de question pour l'éliminatoire

Exemples de question pour la finale

Le language informatique utilisé dans les questionnaires est un pseudo-code défini dans ce document.

  • Double 1

    Votre tâche est d’écrire une fonction qui double tous les “1” dans un tableau de n nombres. Par exemple, si le tableau contient [1,1,5,1,4]avant l’appel de la fonction,il devra contenir [1,1,1,1,5,1,1,4] après l’appelàcelle-ci. Pour simplifier les choses, le tableau qui vous est fourni a une taille 2n, ce qui permet de modifier le tableau sans devoir en créer un nouveau.

    Voici la définition des entrées et de la sortie de l’algorithme.

    Input : n, un nombre entier.
            tab, un tableau de nombres entiers de taille 2n.
    Output: tab est modifié pour que tous les 1 parmi les n premiers nombres du 
            tableau initial soient doublés. 
    

    Nous vous proposons deux algorithmes permettant de résoudre ce même problème, vous devez les compléter.

    Algorithme 1
    count <-- 0
    for (i <-- 0 to ... step 1)                // (a)
    {
      if (tab[...] = 1)                        // (b)
      {
        for (j <-- ... to i+1 step -1)         // (c)
        {
          tab[...] <-- tab[...]                // (d), (e)
        }
        count <-- count + 1
      }
    }
    

    Complétez (a), (b), (c), (d) et (e).

    Algorithme 2
    count <-- 0
    for (i <-- 0 to n-1 step 1)
    {
      if (tab[i] = 1) 
      {
        count <-- count + 1  
      }
    }
    for (j <-- ... to ... step ...)   // (f), (g), (h)
    {
      ...                             // (i)
      if (tab[j] = 1) 
      {
        tab[j+...] <-- 1              // (j)  
        count <-- count - 1
      }
    }
    

    Complétez (f), (g), (h), (i) et (j).

    En sachant que l’algorithme 1 prend environ 8 minutes pour s’exécuter sur un ordinateur moderne lorsque n vaut 1 000 000. Combien de temps ce même ordinateur prendra-t-il pour exécuter l’algorithme 2 ? 10 millisecondes, 4 minutes, 8 minutes, 15 minutes ou plusieurs jours ?

    Montrer/cacher la solution
  • Récursivité

    Vous avez peut-être appris les nombres de Fibonacci lors de vos leçons de mathématiques. Le 0-ième nombre de Fibonacci est 0, et le 1-er est 1. Pour tout n > 1, le n-ième nombre de Fibonacci est la somme du (n−1)-ième et (n−2)-ième nombres de Fibonacci. Les huit premiers nombres de Fibonacci sont donc 0, 1, 1, 2, 3, 5, 8, 13. Les nombres de Fibonacci peuvent être définis mathématiquement comme suit.

    Fib(0) = 0
    Fib(1) = 1
    Fib(n) = Fib(n-1) + Fib(n-2), pour n > 1
    

    C’est ce que l’on nomme une fonction récursive: la fonction Fib est définie en fonction d’elle-même. Dans un langage de programmation, il est facilement possible de transcrire une telle définition comme une fonction qui s’appelle elle-même:

    Input : n, un nombre naturel, pour lequel nous voulons calculer le nombre de Fibonacci
    Output : le n-ième nombre de Fibonacci
    
    Fib(n)
    {
      if (n = 0)
      {
        return 0
      }
      else if (n = 1) 
      {
        return 1
      }
      else
      {
        return Fib(n-1) + Fib(n-2)
      }
    }
    
    • Quel est le résultat de l’appel de fonction Fib(9) ?
    • Combien de fois la fonction Fib s’appelle-t-elle elle-même après l’appel à Fib(2) ?
    • Combien de fois la fonction Fib s’appelle-t-elle elle-même après l’appel à Fib(5) ?

    Des informaticiens malins ont trouvé une façon différente (et, espérons-le, meilleure) de calculer les nombres de Fibonacci. Nous pouvons l’exprimer dans un langage de programmation sous la forme de la fonction récursive BetterFib suivante:

    Input : n, un nombre entier positif, pour lequel nous voulons calculer le nombre de Fibonacci
            a, un nombre entier positif qui est initialement 0
            b, un nombre entier positif qui est initialement 1
            i, un nombre entier positif qui est initialement 0
    Output : le n-ième nombre de Fibonacci
    
    BetterFib(n, a, b, i) {
      if (i = n)
      {
        return a
      }
      else
      {
        return BetterFib(n, b, a+b, i+1)
      }
    }
    

    Pour calculer le n-ième nombre de Fibonacci, on appelle BetterFib(n,0,1,0). On comprend sans doute mieux le code ci-dessus quand on se rend compte que, lors de chaque appel à BetterFib, a contient toujours le i-ième nombre de Fibonacci, et b contient toujours le (i+1)-ième nombre de Fibonacci.

    • Combien de fois la fonction BetterFib s’appelle-t-elle elle-même après l’appel à BetterFib(2,0,1,0) ?
    • Combien de fois la fonction BetterFib s’appelle-t-elle elle-même après l’appel à BetterFib(5,0,1,0) ?
    Montrer/cacher la solution
Finale 2016

Finale 2017

Finale 2018

Finale 2019

Finale 2020

Des questions ?

Contactez-nous !