[취미 알고리즘] 네 개의 정수 abcd 를 정의 합 니 다. 0000 에서 9999 범위 내 에서 다음 과 같은 규칙 에 부합 되 는 네 개의 정 수 를 출력 합 니 다.

글 목록
  • 1. 제목 설명
  • 2. 제목 분석
  • 3. 코드 실현
  • 친구 가 면접 을 보 러 갔 는데 면접 관 이 물 어 본 질문 이 있 습 니 다.
    제목 설명
    네 개의 정수 abcd 를 정의 하고 0000 에서 9999 범위 내 에서 다음 과 같은 규칙 에 부합 되 는 네 개의 정 수 를 출력 합 니 다.
  • a < b < c < d
  • a + b + c + d == 20

  • 예시:
    정 답: 0389, 1289 반 례: 2398, 6789
    2. 문제 분석
  • 방법 1: 폭력 해독, 4 층 순환 을 정의 하고 조건 에 부합 하면 출력 한다.방법 이 간단 하고 시간 복잡 도가 높다. O(n^4)
  • 방법 2: 최적화 방법 1. a、b、c、d 의 실제 수치 범 위 를 요약 하고 순환 횟수 를 줄인다.조건 에 따라 a 의 수 치 는 다음 과 같이 요약 할 수 있다. a + (a+1) + (a+2) + (a+3) <= 20결과: 0<=a<=3.5;같은 이치: b 의 수치: a+1<=b<=(20-3-a)/3;c 의 수치: b+1<=c<=(20-1-a-b)/2;d 직접 계산 하면 얻 을 수 있다.
  • 방법 3: 재 귀 구 해, 면접 관 이 제시 한 실현 방식 은 어떻게 실현 할 지 아직 생각 하지 못 했다.

  • 3. 코드 구현
    /*
                   [abcd],    :
    1. a
    package main
    import "fmt"
    
    func main() {
    	fmt.Println("-----------------[  ]------------------")
    	f0()
    	fmt.Println("-----------------[    ]------------------")
    	f1()
    	fmt.Println("-----------------[  ]------------------")
    	f2()
    }
    
    //     
    func f0() {
    	for a := 0; a <= 9; a++ {
    		for b := 0; b <= 9; b++ {
    			for c := 0; c <= 9; c++ {
    				for d := 0; d <= 9; d++ {
    					if a+b+c+d == 20 && a < b && b < c && c < d {
    						fmt.Printf("%04d
    "
    , a*1000+b*100+c*10+d) } } } } } } // func f1() { for a := 0; a <= (20-6)/4; a++ { for b := a + 1; b <= (20-3-a)/3; b++ { for c := b + 1; c <= (20-1-a-b)/2; c++ { d := 20 - a - b - c if d <= 9 { fmt.Printf("%04d
    "
    , a*1000+b*100+c*10+d) } } } } } // func f2() { // TODO }

    실행 결과:
    -----------------[  ]------------------
    0389
    0479
    0569
    0578
    1289
    1379
    1469
    1478
    1568
    2369
    2378
    2459
    2468
    2567
    3458
    3467
    -----------------[    ]------------------
    0389
    0479
    0569
    0578
    1289
    1379
    1469
    1478
    1568
    2369
    2378
    2459
    2468
    2567
    3458
    3467
    -----------------[  ]------------------
    

    ——2019-07-26——

    좋은 웹페이지 즐겨찾기