Add Happy Numbers (#2839)
Co-authored-by: Louve Le Bronec <loane.le.bronec@eisti.fr> Co-authored-by: Yang Libin <contact@yanglibin.info> Co-authored-by: Yang Libin <szuyanglb@outlook.com>
This commit is contained in:
parent
fb3cec06a1
commit
e488b7b5bb
35
src/main/java/com/thealgorithms/others/HappyNumbersSeq.java
Normal file
35
src/main/java/com/thealgorithms/others/HappyNumbersSeq.java
Normal file
@ -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<Integer> 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);
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user