The Bicycle Lock Problem

COMBINATION_LOCK is a C++ program which simulates the process of determining the combination of a bicycle lock, which can be thought of as simply an integer between 000 and 999.

This program demonstrates the method of exhaustive search, that is, it searches for an answer by trying every possibility.


The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.


BICYCLE_LOCK is available in a C version and a C++ version and a FORTRAN90 version and a MATLAB version and a Python version.

Related Data and Programs:

CHANGE_MAKING, a C++ library which considers the change making problem, in which a given sum is to be formed using coins of various denominations.

COMBINATION_LOCK a C++ library which simulates the process of determining the combination of a lock.

COMBO, a C++ library which includes many combinatorial routines.

KNAPSACK_01, a C++ library which uses brute force to solve small versions of the 0/1 knapsack problem;

PARTITION_PROBLEM, a C++ library which seeks solutions of the partition problem, splitting a set of integers into two subsets with equal sum.

SATISFY, a C++ library which demonstrates, for a particular circuit, an exhaustive search for solutions of the circuit satisfiability problem.

SUBSET, a C++ library which enumerates combinations, partitions, subsets, index sets, and other combinatorial objects.

SUBSET_SUM, a C++ library which seeks solutions of the subset sum problem.

TSP_BRUTE, a C++ library which reads a file of city-to-city distances and solves the traveling salesperson problem, using brute force.


  1. Donald Kreher, Douglas Simpson,
    Combinatorial Algorithms,
    CRC Press, 1998,
    ISBN: 0-8493-3988-X,
    LC: QA164.K73.
  2. Silvano Martello, Paolo Toth,
    Knapsack Problems: Algorithms and Computer Implementations,
    Wiley, 1990,
    ISBN: 0-471-92420-2,
    LC: QA267.7.M37.

Source Code:

Examples and Tests:

List of Routines:

You can go up one level to the C++ source codes.

Last modified on 14 August 2017.