개인 소개: Java 분야의 새로운 스타 크리에이터, 알리바바 클라우드 기술 블로거, 스타 블로거, 전문가 블로거, 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. 엉성한 계산(빈칸 채우기)
题目描述
:
텍스트 버전:
Xiao Ming은 참을성이 없어 초등학교 때 칠판에 선생님이 쓴 잘못된 질문을 자주 복사했습니다.
한번은 선생님이 36 x 495=?
그러나 그는 그것을 베꼈다: 396 x 45=?
그러나 결과는 극적이었고 그의 대답은 옳았습니다! !
36*495=396*45=17820이기 때문입니다.
예를 들어 27*594=297*54와 같이 일치하는 경우가 많을 수 있습니다.
abcde가 1에서 9까지 5개의 다른 숫자를 나타낸다고 가정합니다(그들은 서로 다른 숫자이며 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);
}
}