algorithms with-java-1.0
DESCRIPTION
TRANSCRIPT
Solve problems with Java codeSolve problems with Java code
Algorithms with Algorithms with JavaJava
Sum 1..N – ExampleSum 1..N – Example
Calculate and print the sum of the first N Calculate and print the sum of the first N positive numberspositive numbers
2
Scanner input = new Scanner(System.in);Scanner input = new Scanner(System.in);System.out.print("n = ");System.out.print("n = ");int n = input.nextInt();int n = input.nextInt();int num = 1;int num = 1;int sum = 1;int sum = 1;
System.out.print("The sum 1");System.out.print("The sum 1");while (num < n) {while (num < n) { num++;num++; sum += num;sum += num; System.out.printf("+%d", num);System.out.printf("+%d", num);}}System.out.printf(" = %d%n", sum);System.out.printf(" = %d%n", sum);
Calculating Sum 1..NCalculating Sum 1..NLive DemoLive Demo
Prime Number – ExamplePrime Number – Example
Checking if a number is prime or notChecking if a number is prime or not
4
Scanner input = new Scanner(System.in);Scanner input = new Scanner(System.in);System.out.print("Enter a positive integer: ");System.out.print("Enter a positive integer: ");int num = input.nextInt();int num = input.nextInt();int divider = 2;int divider = 2;int maxDivider = (int) Math.sqrt(num);int maxDivider = (int) Math.sqrt(num);boolean prime = true;boolean prime = true;while (prime && (divider <= maxDivider)) {while (prime && (divider <= maxDivider)) { if (num % divider == 0) {if (num % divider == 0) { prime = false;prime = false; }} divider++;divider++;}}System.out.println("Prime? " + prime);System.out.println("Prime? " + prime);
Checking If a Number Is Checking If a Number Is PrimePrimeLive DemoLive Demo
Using Using breakbreak Operator Operator
breakbreak operator exits the inner-most loop operator exits the inner-most loop
6
Scanner input = new Scanner(System.in);Scanner input = new Scanner(System.in);int n = input.nextInt();int n = input.nextInt();
// "long" is the biggest integer type// "long" is the biggest integer typelong factorial = 1;long factorial = 1;
// Perform an infinite loop// Perform an infinite loopwhile (true) {while (true) { if (n == 1) {if (n == 1) { break;break; }} factorial *= n;factorial *= n; n--;n--;}}System.out.println("n! = " + factorial);System.out.println("n! = " + factorial);
Calculating FactorialCalculating FactorialLive DemoLive Demo
Factorial – ExampleFactorial – Example
Calculating N factorialCalculating N factorial
8
Scanner input = new Scanner(System.in);Scanner input = new Scanner(System.in);System.out.print("n = ");System.out.print("n = ");int n = input.nextInt();int n = input.nextInt();long factorial = 1;long factorial = 1;
do {do { factorial *= n;factorial *= n; n--;n--;}}while (n > 0);while (n > 0);
System.out.println("n! = " + factorial);System.out.println("n! = " + factorial);
Factorial (do ... while)Factorial (do ... while)Live DemoLive Demo
RecursionRecursion
Calling a Method by ItselfCalling a Method by Itself
What is Recursion?What is Recursion?
• Recursion is calling a method by itselfRecursion is calling a method by itself
• Very powerful technique for implementing Very powerful technique for implementing combinatorial algorithmscombinatorial algorithms
• Recursion should haveRecursion should have
• Direct or indirect recursive callsDirect or indirect recursive calls
• The method calls itself directly or through The method calls itself directly or through other methodsother methods
• Exit criteria (bottom)Exit criteria (bottom)
• Prevent infinite recursionPrevent infinite recursion
Factorial – ExampleFactorial – Example
• N! (N Factorial)N! (N Factorial)
• N! = N * (N – 1)! for N >= 0 and 0! = 1N! = N * (N – 1)! for N >= 0 and 0! = 1
• 5! = 5 * 4! or 5 * 4 * 3 * 2 * 1 * 1 = 1205! = 5 * 4! or 5 * 4 * 3 * 2 * 1 * 1 = 120
• 4! = 4 * 3! or 4 * 3 * 2 * 1 * 1 = 244! = 4 * 3! or 4 * 3 * 2 * 1 * 1 = 24
• 3! = 3 * 2! or 3 * 2 * 1 * 1 = 63! = 3 * 2! or 3 * 2 * 1 * 1 = 6
• 2! = 2 * 1! or 2 * 1 * 1 = 22! = 2 * 1! or 2 * 1 * 1 = 2
• 1! = 1 * 0! or 1 * 1 = 11! = 1 * 0! or 1 * 1 = 1
• 0! = 10! = 1
Factorial – ExampleFactorial – Example
• Calculating factorial:Calculating factorial:
• 0! = 10! = 1
• n! = n* (n-1)!, n>0n! = n* (n-1)!, n>0
• Don't do this at home!Don't do this at home!
• Use iteration insteadUse iteration instead
Recursive call: Recursive call: the method calls the method calls
itselfitself
Recursive call: Recursive call: the method calls the method calls
itselfitself
The bottom of The bottom of the recursionthe recursionThe bottom of The bottom of the recursionthe recursion
public public static int static int ffactorial(int n)actorial(int n) {{ if (n == 0) if (n == 0) return 1; return 1; else else return n * return n * ffactorial(n - 1); actorial(n - 1); } }
Product[N..M] – ExampleProduct[N..M] – Example
Calculating the product of all numbers in Calculating the product of all numbers in the interval [n..m]:the interval [n..m]:
14
int n = input.nextInt();int n = input.nextInt();int m = input.nextInt();int m = input.nextInt();
int num = n;int num = n;long product = 1;long product = 1;
do {do { product *= num;product *= num; num++;num++;} } while(num <= m);while(num <= m);System.out.println("product[n..m] = " + product);System.out.println("product[n..m] = " + product);
Product of the Numbers Product of the Numbers in the Interval [n..m]in the Interval [n..m]
Live DemoLive Demo
N^M – ExampleN^M – Example
Calculating n^mCalculating n^m
16
Scanner input = new Scanner(System.in);Scanner input = new Scanner(System.in);int n = input.nextInt();int n = input.nextInt();int m = input.nextInt();int m = input.nextInt();long result = 1;long result = 1;
for (int i = 0; i < m; i++) {for (int i = 0; i < m; i++) { result *= n;result *= n;}}
System.out.println("n^m = " + result);System.out.println("n^m = " + result);
Calculating N^MCalculating N^MLive DemoLive Demo
Using Using continuecontinue Operator Operator
continuecontinue operator ends iteration of the operator ends iteration of the inner-most loopinner-most loop
Example: Sum odd numbers p in [1, n] that Example: Sum odd numbers p in [1, n] that are not divisors of 7:are not divisors of 7:
18
int n = input.nextInt();int n = input.nextInt();int sum = 0;int sum = 0;
for (int i = 1; i <= n; i += 2) {for (int i = 1; i <= n; i += 2) { if (i % 7 == 0)if (i % 7 == 0) continue;continue; sum += i;sum += i;}}System.out.println("sum = " + sum);System.out.println("sum = " + sum);
Using Using continuecontinue Operator OperatorLive DemoLive Demo
Nested LoopsNested LoopsUsing Loop Inside a LoopUsing Loop Inside a Loop
What Is Nested Loop?What Is Nested Loop?
A composition of loops is called a nested A composition of loops is called a nested looploop
Example:Example:
21
for (initialization; test; update) {for (initialization; test; update) { for (initialization; test; update) {for (initialization; test; update) { statements;statements; }} … …} }
Nested LoopsNested LoopsExamplesExamples
Triangle – ExampleTriangle – Example
Print the following triangle on the console:Print the following triangle on the console:
11
1 21 2
……
1 2 3 ... n1 2 3 ... n
23
int n = input.nextInt();int n = input.nextInt();for (int i = 1; i <= n; i++) {for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) {for (int j = 1; j <= i; j++) { System.out.print(j + " ");System.out.print(j + " "); }} System.out.println();System.out.println();}}
TriangleTriangleLive DemoLive Demo
Primes[N, M] – ExamplePrimes[N, M] – Example
Print all prime numbers in [n, m]Print all prime numbers in [n, m]
25
int n = input.nextInt();int n = input.nextInt();int m = input.nextInt();int m = input.nextInt();for (int num = n; num <= m; num++) {for (int num = n; num <= m; num++) { boolean prime = true;boolean prime = true; int divider = 2;int divider = 2; int maxDivider = (int) Math.sqrt(num);int maxDivider = (int) Math.sqrt(num); while (divider <= maxDivider) {while (divider <= maxDivider) { if (num % divider == 0) {if (num % divider == 0) { prime = false;prime = false; break;break; }} divider++;divider++; }} if (prime) {if (prime) { System.out.printf("%d ", num);System.out.printf("%d ", num); }}}}
Primes in Range [n, m]Primes in Range [n, m]Live DemoLive Demo
Loops – More ExamplesLoops – More Examples
Nested Loops – ExamplesNested Loops – Examples
Print all four digit numbers ABCD such that Print all four digit numbers ABCD such that A+B = C+D (happy numbers)A+B = C+D (happy numbers)
28
for (int a = 1; a <= 9; a++) {for (int a = 1; a <= 9; a++) { for (int b = 0; b <= 9; b++) {for (int b = 0; b <= 9; b++) { for (int c = 0; c <= 9; c++) {for (int c = 0; c <= 9; c++) { for (int d = 0; d <= 9; d++) {for (int d = 0; d <= 9; d++) { if ((a + b) == (c + d)) {if ((a + b) == (c + d)) { System.out.printf("%d,%d,%d,%d", System.out.printf("%d,%d,%d,%d", a, b, c, d);a, b, c, d);
}}}}
}} }}}}
Can you improve Can you improve this algorithm to this algorithm to
use only 3 loops?use only 3 loops?
Can you improve Can you improve this algorithm to this algorithm to
use only 3 loops?use only 3 loops?
Happy NumbersHappy NumbersLive DemoLive Demo
TOTO 6/49 – ExamplesTOTO 6/49 – Examples
Print all combinations from TOTO 6/49Print all combinations from TOTO 6/49
30
for (int i1 = 1; i1 <= 44; i1++)for (int i1 = 1; i1 <= 44; i1++)
for (int i2 = i1 + 1; i2 <= 45; i2++)for (int i2 = i1 + 1; i2 <= 45; i2++)
for (int i3 = i2 + 1; i3 <= 46; i3++)for (int i3 = i2 + 1; i3 <= 46; i3++)
for (int i4 = i3 + 1; i4 <= 47; i4++)for (int i4 = i3 + 1; i4 <= 47; i4++)
for (int i5 = i4 + 1; i5 <= 48; i5++)for (int i5 = i4 + 1; i5 <= 48; i5++)
for (int i6 = i5 + 1; i6 <= 49; i6++)for (int i6 = i5 + 1; i6 <= 49; i6++)
System.out.printf(System.out.printf(
"%d %d %d %d %d %d%n","%d %d %d %d %d %d%n",
i1, i2, i3, i4, i5, i6);i1, i2, i3, i4, i5, i6);
How long will it How long will it take to finish this?take to finish this?
How long will it How long will it take to finish this?take to finish this?
TOTO 6/49TOTO 6/49Live DemoLive Demo
SummarySummary
Loops could solve different problemsLoops could solve different problems Recursion could be handy as wellRecursion could be handy as well We can use nested loops to implement We can use nested loops to implement
more complex logicmore complex logic We can use We can use continuecontinue and and break break operators operators
to control the loop executionto control the loop execution More to come with arrays' manipulationMore to come with arrays' manipulation
32
Exercises Exercises
1.1. Write a program that prints all the numbers Write a program that prints all the numbers from 1 to N.from 1 to N.
2.2. Write a program that prints all the numbers Write a program that prints all the numbers from 1 to N, that are not divisible by 3 and 7.from 1 to N, that are not divisible by 3 and 7.
3.3. Write a program that reads from the console a Write a program that reads from the console a sequence of N integer numbers and returns sequence of N integer numbers and returns the minimal and maximal of them.the minimal and maximal of them.
4.4. Write a program that calculates N!/K! for Write a program that calculates N!/K! for given N and K (1<N<K).given N and K (1<N<K).
33
Exercises (3) Exercises (3)
1.1. Write a program that reads a number N and Write a program that reads a number N and calculates the sum of the first N members of calculates the sum of the first N members of the sequence of Fibonacci: the sequence of Fibonacci: 0, 1, 1, 2, 3, 5, 8, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, …13, 21, 34, 55, 89, 144, 233, 377, …
2.2. In the combinatorial mathematics, the In the combinatorial mathematics, the Catalan numbers are calculated by the Catalan numbers are calculated by the following formula:following formula:
Write a program to calculate the Catalan Write a program to calculate the Catalan number by given N.number by given N.
34
Exercises (4)Exercises (4)
1.1. Write a program that reads from the console Write a program that reads from the console a positive integer number N (N < 20) and a positive integer number N (N < 20) and outputs a matrix like the following:outputs a matrix like the following:
N = 3N = 3 N = 4N = 4
35
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
1 2 3
2 3 4
3 4 5
Exercises (5)Exercises (5)
36
1. Write a program that calculates for given N how many trailing zeros present at the end of the number N!. Examples:
N = 10 N! = 3628800 2
N = 20 N! = 2432902008176640000 4
Does your program work for N = 50 000?
Hint: The trailing zeros in N! are equal to the number of its prime divisors 5. Think why!