Files
teaching/java/Main.java
2026-01-20 18:28:52 +03:00

310 lines
12 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import java.lang.reflect.Array;
import java.math.BigInteger;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
task24(args);
}
static void task24(String[] args) {
/*
Вампирами называются числа, состоящие из четного количества цифр и полученные перемножением пары чисел, каждое из которых содержит половину цифр результата. Цифры берутся из исходного числа в произвольном порядке, завершающие нули недопустимы. Примеры:
1) 1260 = 21 * 60;
2) 1827 = 21 * 87;
3) 2187 = 27 * 81.
Напишите программу, которая находит всех «вампиров», состоящих из 4 цифр. (Задача предложена Дэном Форханом.)
*/
for (int x = 10; x < 100; x++) {
for (int y = 10; y < 100; y++) {
if (Integer.toString(x * y).length() == 4) {
char[] claws_array = (Integer.toString(x) + Integer.toString(y)).toCharArray();
Arrays.sort(claws);
String
char[] vampire_array = Integer.toString(x * y).toCharArray();
Arrays.sort(claws);
if (claws.equals(vampire)) {
System.out.println(x + " * " + y + " = " + x * y);
}
}
}
}
}
static void task23(String[] args) {
/*
(4) Числами Фибоначчи называется числовая последовательность 1, 1, 2, 3, 5, 8, 13, 21, 34 и т. д., в которой каждое число, начиная с третьего, является суммой двух предыдущих. Напишите метод, который получает целочисленный аргумент и выводит указанное количество чисел Фибоначчи. Например, при запуске командой java Fibonacci 5 (где Fibonacci — имя класса) должна выводиться последовательность 1, 1, 2, 3, 5.
*/
int n = Integer.parseInt(args[0]);
// System.out.println(n);
BigInteger A = BigInteger.valueOf(1), B = BigInteger.valueOf(1), C;
if (n == 0) {
System.out.println("");
} else if (n == 1) {
System.out.println("1");
} else if (n == 2) {
System.out.println("1 1");
} else {
System.out.print("1 1 ");
for (int i = 0; i < n - 2; i++) {
C = A.add(B);
A = B;
B = C;
System.out.print(B.toString() + " ");
}
}
}
static void task22() {
/*
Создайте команду switch, которая выводит сообщение в каждой секции case. Разместите ее в цикле for, проверяющем все допустимые значения case. Каждая секция case должна завершаться командой break. Затем удалите команды break и посмотрите, что произойдет.
*/
for (int i = 1; i <= 5; i++) {
switch (i) {
case 1:
case 2:
System.out.println("<3");
break;
case 4:
case 5:
System.out.println("no love :(");
break;
default:
System.out.println(i);
break;
}
}
}
static int test(int testval, int begin, int end) {
/*
1 - testval принадлежит [begin, end]
0 - иначе
*/
if (begin <= testval && testval <= end) {
return 1;
}
return 0;
}
static void task20() {
/*
Измените метод test() так, чтобы он получал два дополнительных аргумента begin и end, а значение testval проверялось на принадлежность к диапазону [begin, end] (с включением границ).
*/
System.out.println(
test(2, 1, 5) // 2 in [1, 5] (1)
);
System.out.println(
test(1, 1, 5) // 1 in [1, 5] (1)
);
System.out.println(
test(-1, 1, 5) // -1 not in [1, 5] (0)
);
}
static void task18() {
/*
Напишите программу, использующую два вложенных цикла for и оператор остатка (%) для поиска и вывода простых чисел (то есть целых чисел, не делящихся нацело ни на какое другое число, кроме себя и 1).
*/
for (int i = 2; i < 100000; i++) {
boolean prime = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
// System.out.println("число " + i + " не простое");
prime = false;
break;
}
}
if (prime) {
System.out.println("число " + i + " простое");
}
}
}
static void task17() {
/*
Измените упражнение 2 так, чтобы код выполнялся в «бесконечном» цикле while. Программа должна работать до тех пор, пока ее выполнение не будет прервано с клавиатуры (как правило, нажатием клавиш Ctrl+C).
*/
while (true) {
task16();
}
}
static void task16() {
/*
Напишите программу, которая генерирует 25 случайных значений типа int. Для каждого значения команда if - e ls e сообщает, в каком отношении оно находится с другим случайно сгенерированным числом (больше, меньше, равно).
*/
for (int i = 0; i < 25; i++) {
int num1 = (int)(Math.random() * 100);
int num2 = (int)(Math.random() * 100);
// System.out.println("num1: " + num1);
// System.out.println("num2: " + num2);
if (num1 > num2) {
System.out.println(num1 + " > " + num2);
} else if (num1 < num2) {
System.out.println(num1 + " < " + num2);
} else {
System.out.println(num1 + " = " + num2);
}
}
}
static void task15() {
/*
Напишите программу, которая выводит числа от 1 до 100.
*/
for (int i = 1; i <= 100; i++) {
System.out.println(i);
}
}
static void allStringOps(String s1, String s2) {
System.out.println("s1 < s2: " + (s1.compareTo(s2) < 0));
System.out.println("s1 > s2: " + (s1.compareTo(s2) > 0));
System.out.println("s1 <= s2: " + (s1.compareTo(s2) <= 0));
System.out.println("s1 >= s2: " + (s1.compareTo(s2) >= 0));
System.out.println("s1 == s2: " + (s1 == s2));
System.out.println("s1 != s2: " + (s1 != s2));
System.out.println("s1.equals(s2): " + s1.equals(s2));
System.out.println("s2.equals(s1): " + s2.equals(s1));
System.out.println();
}
static void task14() {
/*
Напишите метод, который получает два аргумента String, выполняет с ними все операции логических сравнений и выводит результаты. Для операций == и != также выполните проверку equals(). Вызовите свой метод из main() для нескольких разных объектов String.
*/
allStringOps("hello", "world");
allStringOps("hello", "hello");
allStringOps(new String("hello"), new String("hello"));
}
static void charToBin(char ch) {
String bin = Integer.toBinaryString(ch);
System.out.println(
String.format("%16s", bin).replace(' ', '0')
);
}
static void task13() {
/*
Напишите метод для вывода char в двоичном представлении. Продемонстрируйте его работу на нескольких разных символах.
*/
char a = 'a', b = 'b', x = 'x', z = 'z';
charToBin(a);
charToBin(b);
charToBin(x);
charToBin(z);
}
static void task12() {
/*
Начните с числа, состоящего из двоичных единиц. Сдвиньте его влево, а затем используйте беззнаковый оператор сдвига вправо по всем двоичным позициям, с выводом всех промежуточных результатов методом lnteger.toBinaryString().
*/
int value = 0xFFFFFFFF;
System.out.println(Integer.toBinaryString(value));
value <<= 1;
System.out.println(Integer.toBinaryString(value));
for (int i = 0; i < 32; i++) {
value >>>= 1;
System.out.println(Integer.toBinaryString(value));
}
}
static void task11() {
/*
Начните с числа, содержащего двоичную 1 в старшем бите (подсказка: воспользуйтесь шестнадцатеричной константой). Используйте знаковый оператор сдвига вправо, сдвигайте знак до крайней правой позиции, с выводом всех промежуточных результатов методом Integer.toBinaryString().
*/
int value = 0x80000000;
for (int i = 0; i < 32; i++) {
System.out.println(Integer.toBinaryString(value));
value >>= 1;
}
}
static void task10() {
/*
Напишите программу с двумя константами: обе константы состоят из чередующихся нулей и единиц, но у одной нулю равен младший бит, а у другой старший (подсказка: константы проще всего определить в шестнадцатеричном виде). Объедините эти две константы всеми возможными поразрядными операторами. Для вывода результатов используйте метод Integer.toBinaryString().
*/
int const1 = 0xAAAAAAAA;
int const2 = 0x55555555;
int bitwise_and = const1 & const2;
int bitwise_or = const1 | const2;
int bitwise_xor = const1 ^ const2;
int bitwise_not = ~const1;
System.out.println("AND(&): " + Integer.toBinaryString(bitwise_and));
System.out.println("OR(|): " + Integer.toBinaryString(bitwise_or));
System.out.println("XOR(^): " + Integer.toBinaryString(bitwise_xor));
System.out.println("NOT(~):" + Integer.toBinaryString(bitwise_not));
}
static void task9() {
/*
Выведите наибольшее и наименьшее число в экспоненциальной записи для типов float и double.
*/
float max_float = Float.MAX_VALUE;
double max_double = Double.MAX_VALUE;
float min_float = Float.MIN_VALUE;
double min_double = Double.MIN_VALUE;
System.out.println("Max float value: " + max_float);
System.out.println("Max double value: " + max_double);
System.out.println("Min float value: " + min_float);
System.out.println("Min double value: " + min_double);
}
static void task8() {
/*
Покажите, что шестнадцатеричная и восьмеричная записи могут использоваться с типом long. Для вывода результатов используйте метод Long.toBinaryString().
*/
long hex = 0x123L;
long oct = 0123;
System.out.println(Long.toBinaryString(hex));
System.out.println(Long.toBinaryString(oct));
}
}