질문 요구 사항은 다음과 같습니다.
Callatz 추측 :
자연 숫자 n의 경우 균일 한 숫자 인 경우 절반을 잘라냅니다. 홀수 인 경우 (3N+1) 절반을 자릅니다. 계속 반복적으로 절단하면 특정 단계에서 N = 1을 확실히 얻게됩니다. Karaz 추측을 확인하면 반복 계산을 피하기 위해 재귀 과정에서 발생하는 모든 숫자를 기록 할 수 있습니다. 예를 들어, n = 3을 확인할 때, 우리는 3, 5, 8, 4, 2 및 1을 계산해야합니다. n = 5, 8, 4 및 2를 확인할 때, 우리는 반복 계산없이 Karaz 추측의 진위를 직접 확인할 수 있습니다.이 4 개의 숫자는 3을 확인할 때 5, 8, 4, 2가 "3 번"이라는 숫자 "라고 말하기 때문에"숫자는 " 순서대로 다른 숫자로 덮어 쓸 수 없습니다.
이제 확인해야 할 일련의 숫자가 주어지면 몇 가지 주요 숫자 만 확인하면 나머지 숫자를 반복적으로 확인할 필요가 없습니다. 귀하의 임무는 이러한 주요 숫자를 찾아서 큰 것부터 작은 것부터 순서대로 출력하는 것입니다.
입력 형식 : 각 테스트 입력에는 1 개의 테스트 케이스가 포함됩니다. 라인 1은 양의 정수 k (<100)를 제공하고, 라인 2는 k의 k 값이 다른 양의 정수 n (1 <n <= 100)을 검증하여 공간으로 분리합니다.
출력 형식 : 각 테스트 케이스의 출력은 하나의 행을 차지하고 키 숫자는 대형에서 작은 것부터 순서대로 출력됩니다. 숫자는 1 개의 공간으로 분리되지만 마지막 숫자 후에는 공백이 없습니다.
샘플 입력 :
6
3 5 6 7 8 11
출력 샘플 :
7 6
코드는 다음과 같습니다.
<span style = "font-size : 14px;"> import java.util.arraydequ; java.util.arraylist 가져 오기; java.util.dequ; Java.util.list 가져 오기; Java.util.queue 가져 오기; java.util.scanner import; import java.util.sortedset; java.util.treeset import; public class pat1005 {public static void main (String [] args) {// todo 자동 생성 메소드 스터브 스캐너 = 새 스캐너 (System.in); int numsize = scanner.nextInt (); Arraydeque <integer> newArraydeque = new Arraydeque <integer> (); Arraydeque <integer> closeArraydeque = new Arraydeque <integer> (); int i; while (scanner.hasnext ()) {// 키보드 입력 값 (i = 0; i <numsize; i ++) {newArraydequ.Add (scanner.nextInt ()); } if (i> = numsize) {break; }} int temp; for (정수 정수 : NewArraydequ) {// 비정규 번호를 CloseArraydequate temp = Integer에 저장합니다. while (temp! = 1) {if (temp%2 == 0) {temp = temp/2; if (newArraydequ.contains (temp))) {closeArraydequ.add (temp); }} else {temp = (temp*3+1)/2; if (newArraydequ.contains (temp))) {closeArraydequ.add (temp); }}}} sortedset <integer> sortedset = new treeset <integer> (); // SortedSet은 (정수 정수 : newArraydeque) {if (! closeAreArraydeque.contains (integer)) {SortedSet.Add (Integer); }} int [] leftint = new int [sortedSet.size ()]; int j = sortedset.size () -1; for (정수 정수 : SortedSet) {leftint [j] = 정수; J--; } for (int j2 = 0; j2 <leftint.length; j2 ++) {// 크게에서 작은 if (j2 == leftint.length-1) {System.out.println (leftint [j2]); } else {System.out.print (LeftInt [j2]+""); }}}}}} </span>위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.