③【Java Group】Реальные вопросы провинциального конкурса Blue Bridge Cup [Золотые непрерывные дроби] [Небрежные вычисления] постоянно обновляются...

вставьте сюда описание изображения

Личное краткое введение: создатель новой звезды в области Java, блогер облачных технологий Alibaba, звездный блогер, блогер-эксперт, на пути изучения Java, запись процесса обучения~ Персональная домашняя страница: блог .29. Обучающее
сообщество :
зайдите и прогуляться~

вставьте сюда описание изображения





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);
	}
}





вставьте сюда описание изображения

Supongo que te gusta

Origin blog.csdn.net/ebb29bbe/article/details/129272467
Recomendado
Clasificación