Личное краткое введение: создатель новой звезды в области Java, блогер облачных технологий Alibaba, звездный блогер, блогер-эксперт, на пути изучения Java, запись процесса обучения~ Персональная домашняя страница: блог .29. Обучающее
сообщество :
зайдите и прогуляться~
Реальные вопросы Blue Bridge Cup - постоянно обновляются...
1. Золотые последовательные дроби (заполните пропуск)
题目描述
:
Текстовая версия:
Число золотого сечения 0,61803... является иррациональным числом.Эта константа очень важна и будет появляться во многих инженерных задачах. Иногда необходимо очень точно получить эту цифру.
Для некоторых методов точного машиностроения важна точность констант. Возможно, вы слышали о космическом телескопе Хаббла, который обнаружил человеческую ошибку после своего первого старта.Для такого огромного объекта это была на самом деле просто ошибка в обработке зеркала во много раз тоньше человеческого волоса.Он стал "близорукий"!!
Ближе к делу, как нам найти наиболее точное значение числа золотого сечения? Есть много способов.
Проще всего использовать непрерывные дроби:
1
黄金数 = ---------------------
1
1 + -----------------
1
1 + -------------
1
1 + ---------
1 + ...
Чем больше «слоев» вычисляет эта непрерывная дробь, тем ближе ее значение к числу золотого сечения.
Пожалуйста, используйте эту функцию, чтобы найти достаточно точное значение числа золотого сечения, которое требует округления до 100 знаков после запятой.
Значение 3 знаков после запятой: 0,618;
Значение 4 знаков после запятой: 0,6180;
Значение 5 знаков после запятой: 0,61803;
Значение 7 знаков после запятой: 0,6180340. (Обратите внимание на завершающий 00, который нельзя игнорировать)
Ваша задача: написать значение золотого сечения с точностью до 100 знаков после запятой.
Примечание: округление мантиссы! Если мантисса равна 0, она также должна быть зарезервирована
解题思路
:
Согласно схеме цепной дроби золотого числа, приведенной в заголовке, мы можем найти, что числа между соседними уровнями связаны:
① Знаменатель золотого числа = знаменатель предыдущего уровня + числитель
② Числитель золотое число = предыдущий уровень. Подсчитайте знаменатель
, и замена числителя и знаменателя окажется последовательностью Фибоначчи, затем мы преобразуем задачу в нахождение отношения двух соседних чисел Фибоначчи.
В то же время заголовок требует записи значения золотого сечения с точностью до 100 знаков после запятой.Числа с плавающей запятой больше не могут удовлетворять такому количеству знаков после запятой, поэтому необходимо использовать BigInteger и BigDecimal.
解题代码
:
import java.math.BigDecimal;
import java.math.BigInteger;
//求斐波那契额相邻两个数的比值,需要保证小数点后101位准确,使用BigInteger和BigDecimal
public class 黄金连分数 {
public static void main(String[] args) {
BigInteger a = BigInteger.ONE; //a代表分子
BigInteger b = BigInteger.ONE; //b代表分母
for(int i = 3;i < 500;i++) {
//第一层是 1/1 (已知),所以从第三个数开始
BigInteger temp = b;
b = a.add(b); //黄金数的分母 = 上一层数 分母+分子
a = temp; //黄金数的分子 = 上一层数分母
}
//创建BigDecimal对象,小数点没有限制;
//divide()方法表示除法运算
BigDecimal divide = new BigDecimal(a,110).divide(new BigDecimal(b,110),BigDecimal.ROUND_HALF_DOWN);
//输出黄金分割数,精确到101位(103代表字符数,包含0和.)
System.out.println(divide.toPlainString().substring(0,103));
//0.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748
//小数点后101位,我们需要四舍五入至100位
//0.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375
}
}
答案:0.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375
2. Небрежный расчет (заполните пропуск)
题目描述
:
Текстовая версия:
Сяо Мин нетерпелив.Когда он учился в начальной школе, он часто копировал неправильные вопросы, написанные учителем на доске.
Однажды учитель задал вопрос: 36 х 495=?
Но он скопировал: 396 х 45=?
Но результат был драматическим, и его ответ оказался правильным! !
Потому что 36*495=396*45=17820.
Таких совпадений может быть много, например: 27*594=297*54.
Предположим, что abcde представляет 5 различных чисел от 1 до 9 (обратите внимание, что это разные числа и не содержат 0).
Сколько формул может удовлетворять формуле: ab∗cde = adb∗ce?
Пожалуйста, используйте преимущества компьютера, чтобы найти все возможности и ответить на количество типов различных формул расчета.
Расчетные формулы, удовлетворяющие переместительному закону умножения, считаются разными типами, поэтому ответ должен быть четным числом.
解题思路
:
По требованиям темы пройдитесь по всем числовым комбинациям, а когда найдете формулу, удовлетворяющую условиям, просто прибавьте 1 к количеству типов.
解题代码
:
public class 马虎的算式 {
public static void main(String[] args){
int count = 0; //记录种类数
//数字1~9随机,故遍历所有循环,abcde间的所有数字可能,则需要不断嵌套循环
for(int a = 1;a < 10;++a) {
for(int b = 1;b < 10;++b) {
//循环前进行判断,保证是各不相同的数字
if(a != b) for(int c = 1;c < 10;++c) {
if(a != c && b!= c) for(int d = 1;d < 10;++d) {
if(a != d && b != d && c != d) for(int e = 1;e < 10;++e) {
if(a != e && b != e && c != e && d != e)
//如果 ab∗cde = adb∗ce
if((a*10 + b ) * (c*100+d*10+e) == (c*10 + e ) * (a*100+d*10+b))
//数量+1
++count;
}
}
}
}
}
System.out.print(count);
}
}