From e488b7b5bb3f7c48591d084bbd5e12674df362f9 Mon Sep 17 00:00:00 2001 From: Louve Le bronec Date: Fri, 26 Nov 2021 18:35:35 +0100 Subject: [PATCH] Add Happy Numbers (#2839) Co-authored-by: Louve Le Bronec Co-authored-by: Yang Libin Co-authored-by: Yang Libin --- .../thealgorithms/others/HappyNumbersSeq.java | 35 ++++++++++ .../searches/LinearSearchThread.java | 65 +++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 src/main/java/com/thealgorithms/others/HappyNumbersSeq.java create mode 100644 src/main/java/com/thealgorithms/searches/LinearSearchThread.java diff --git a/src/main/java/com/thealgorithms/others/HappyNumbersSeq.java b/src/main/java/com/thealgorithms/others/HappyNumbersSeq.java new file mode 100644 index 00000000..9db11157 --- /dev/null +++ b/src/main/java/com/thealgorithms/others/HappyNumbersSeq.java @@ -0,0 +1,35 @@ +package com.thealgorithms.others; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Scanner; +import java.util.Set; + +public class HappyNumbersSeq { + private static final Set CYCLE_NUMS = new HashSet<>(Arrays.asList(4, 16, 20, 37, 58, 145)); + + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + System.out.print("Enter number: "); + int n = in.nextInt(); + while (n != 1 && !isSad(n)) { + System.out.print(n + " "); + n = sumSquares(n); + } + String res = n == 1 ? "1 Happy number" : "Sad number"; + System.out.println(res); + } + + private static int sumSquares(int n) { + int s = 0; + for (; n > 0; n /= 10) { + int r = n % 10; + s += r * r; + } + return s; + } + + private static boolean isSad(int n) { + return CYCLE_NUMS.contains(n); + } +} diff --git a/src/main/java/com/thealgorithms/searches/LinearSearchThread.java b/src/main/java/com/thealgorithms/searches/LinearSearchThread.java new file mode 100644 index 00000000..68613525 --- /dev/null +++ b/src/main/java/com/thealgorithms/searches/LinearSearchThread.java @@ -0,0 +1,65 @@ +package com.thealgorithms.searches; + +import java.util.Scanner; + +public class LinearSearchThread { + public static void main(String[] args) { + int[] list = new int[200]; + for (int j = 0; j < list.length; j++) { + list[j] = (int) (Math.random() * 100); + } + for (int y : list) { + System.out.print(y + " "); + } + System.out.println(); + System.out.print("Enter number to search for: "); + Scanner in = new Scanner(System.in); + int x = in.nextInt(); + Searcher t = new Searcher(list, 0, 50, x); + Searcher t1 = new Searcher(list, 50, 100, x); + Searcher t2 = new Searcher(list, 100, 150, x); + Searcher t3 = new Searcher(list, 150, 200, x); + t.start(); + t1.start(); + t2.start(); + t3.start(); + try { + t.join(); + t1.join(); + t2.join(); + t3.join(); + } catch (InterruptedException e) { + } + boolean found = t.getResult() || t1.getResult() || t2.getResult() || t3.getResult(); + System.out.println("Found = " + found); + } +} + +class Searcher extends Thread { + private final int[] arr; + private final int left, right; + private final int x; + private boolean found; + + Searcher(int[] arr, int left, int right, int x) { + this.arr = arr; + this.left = left; + this.right = right; + this.x = x; + } + + @Override + public void run() { + int k = left; + found = false; + while (k < right && !found) { + if (arr[k++] == x) { + found = true; + } + } + } + + boolean getResult() { + return found; + } +}