This first-year course in discrete mathematics requires no calculus or computer programming experience. The approach stresses finding efficient algorithms, rather than existential results. Provides an introduction to constructing proofs (especially by induction), and an introduction to algorithmic problem-solving. All algorithms are presented in English, in a format compatible with the Pascal programming language. Contains many exercises, with answers...