1. 우박수 코드화(콜라츠 추측)
https://namu.wiki/w/%EC%BD%9C%EB%9D%BC%EC%B8%A0%20%EC%B6%94%EC%B8%A1
https://terms.naver.com/entry.nhn?docId=3568350&cid=58944&categoryId=58970
이걸 보면 대충 무슨 의미일 것인지 아니깐 생략.
간단히 얘기하면, 어떤 숫자든 짝수는 2 나누고 홀수일 경우 3곱한 후 1 더하는 짓거리를 반복하면,
어떤 수 a -> '우박수 계산짓' -> '우박수 계산짓' -> ... -> '우박수 계산짓' -> 1
이렇게 1로 귀결된다는 것이다.
코드로 정리하면 다음과 같다.
int n = 14; // 아무 숫자나 넣어도 됨.
int k = 0; // 카운팅용
while (true) {
if (n % 2 != 1) { //짝수면?
n = n / 2; //2나누고 다시 위로 보내
} else { // 아니면?(=홀수면?)
n = n * 3 + 1; // 3 곱하고 1 더해 위로 보내
}
System.out.println(n); // 계산 한 번 할때마다 출력
k++; //몇 번 계산했는지 확인 위해 카운팅
if (n == 1) { // 마침내 1이 되면?
break; // 끝!
} else {
continue;
}
}
System.out.println("실행 횟수: " + k);
컴퓨터는 이 미제의 답을 알고 있을까...
사람이 알지 못하는 법칙도 자알 실행되는 것도 참 신기하다.
2. Math.Random()의 활용문제.
Math.Random()는 0~0.9까지의 수를 컴터 멋대로 뱉어내는 메소드이다.
보통 인생 역전을 꿈꾸는 숫자를 컴터에 의지하고 싶을 때
우린 다음과 같이 해야 원하는 대로 뱉어낸다.
// 1~45숫자 6개 출력!
int[] number = new int[6];
System.out.print("로또숫자: ");
for (int i = 0; i < 6; i++) { //배열에 랜덤짓한 숫자 6번 넣기
number[i] = (int) (Math.random() * 45 + 1); //casting
System.out.print(number[i]+" | "); // 숫자 하나씩 출력
}
우리가 원하는 수는 대부분이 정수이기 때문에, integer로 대부분 casting 하는 것을 쓸 것이다.
여기서 선생님은 다음과 같은 조건 하에 랜덤 숫자를 내도록 문제를 주셨다.
1. 100~999 숫자 중 중복되는 숫자(ex. 333, 442, 393) 안 나오게 출력
2. 배열 사용하지 말 것.(으악)
int a = 0;
int ct = 0;
int ctNum = 0;
while (true) {
int k = ((int) (Math.random() * 900) + 100);
int k100 = k / 100;
int k10 = k / 10 % 10;
int k1 = k % 10;
if (k100 == k10 || k10 == k1 || k100 == k1) {
ct++;
continue;
} else {
System.out.println(k);
ctNum++;
}
if (ctNum == 10) {
break;
}
} // while
System.out.println("중복 숫자 삭제 횟수: " + ct);
'Java > Learn_Java' 카테고리의 다른 글
Java의 비트 연산자 이용법 (0) | 2020.04.13 |
---|---|
6. 클래스_연습문제(은행 계좌) (0) | 2020.04.05 |
5. 참조 타입_연습문제 (0) | 2020.04.05 |
5. 참조 타입 (0) | 2020.03.29 |
4. 조건문과 반복문_활용문제 (0) | 2020.03.29 |