③【Java 그룹】푸른 다리 컵 지방 대회의 실제 질문 [황금 연속 분수] [조잡한 계산]은 지속적으로 업데이트되고 있습니다...

여기에 이미지 설명 삽입

개인 소개: 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);
	}
}





여기에 이미지 설명 삽입

추천

출처blog.csdn.net/ebb29bbe/article/details/129272467