C++11
#include <vector>
#include <algorithm>
#include <ctime>
#include <stdio.h>
using namespace std;
int main() {
srand((unsigned int) time(NULL));
vector<int> num;
for (int i = 1; i <= 45; i++)
num.push_back(i); //1~45로 초기화
random_shuffle(num.begin(), num.end()); //모두 섞음
sort(num.begin(), num.begin() + 6); //앞 6개 숫자만 정렬
for (int n : vector<int>(num.begin(), num.begin() + 6))
printf("%02d ", n); //표시
return 0;
}
C++14
#include <vector>
#include <algorithm>
#include <random>
#include <chrono>
#include <stdio.h>
using namespace std;
int main() {
unsigned seed = chrono::system_clock::now().time_since_epoch().count();
mt19937_64 rnd(seed);
vector<int> num;
for (int i = 1; i <= 45; i++)
num.push_back(i); //1~45로 초기화
shuffle(num.begin(), num.end(), rnd); //모두 섞음
sort(num.begin(), num.begin() + 6); //앞 6개 숫자만 정렬
for (int n : vector<int>(num.begin(), num.begin() + 6))
printf("%02d ", n); //표시
return 0;
}
메인함수 빈 줄 이전은 초기화이고
여러번 생성하고 싶을 경우 빈 줄 이후로 리턴 전까지만 for루프를 돌리면 됩니다.
백터를 1~45로 초기화 한 다음 백터를 랜덤 셔플하고 첫 6개 숫자만 정렬해서 출력하는 코드입니다.
C
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int comp(const void *a, const void *b) {
int v = *(int*) a - *(int*) b;
return v ? v > 0 ? 1 : -1 : 0;
}
void random_shuffle(int arr[], int size) {
int i;
for (i = size - 1; i > 0; i--)
swap(&arr[i], &arr[rand() % (i + 1)]);
}
int main(void) {
int num[45], i;
srand(time(NULL));
for (i = 0; i < 45; i++)
num[i] = i + 1; //1~45로 초기화
random_shuffle(numbers, 45); //모두 섞음
qsort(num, 6, sizeof(int), comp); //앞 6개 숫자만 정렬
for (i = 0; i < 6; i++)
printf("%02d ", num[i]); //표시
return 0;
}
순수 C는 swap이랑 random_shuffle이랑 comp함수를 직접 구현해줘서 그렇지
사실상 C++ 코드와 같은 방식으로 작동합니다.
Java
import java.util.*;
public class LottoGen {
public static void main(String[] args) {
List<Integer> num = new Vector<Integer>(45);
for (int i = 1; i <= 45; i++)
num.add(i); // 1~45로 초기화
Collections.shuffle(num); //모두 섞음
List<Integer> selected = num.subList(0, 6); // 앞 6개 숫자만 정렬
Collections.sort(selected);
for (int n : selected)
System.out.format("%02d ", n); // 표시
}
}
Javascript
function swap(arr, a, b) {
var temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
function random_shuffle(arr) {
for (var i = arr.length - 1; i > 0; i--)
swap(arr, i, Math.floor(Math.random() * (i + 1)));
}
(function() {
var num = [];
for (var i = 1; i <= 45; i++)
num.push(i); // 1~45로 초기화
random_shuffle(num); //모두 섞음
var selected = num.slice(0, 6); //앞 6개 숫자만 정렬
selected.sort(function(a,b){return a-b;});
alert(selected); // 표시
})();
Python
import random
selected = random.sample(range(1, 46), 6) #1~45중 숫자 6개 뽑음
selected.sort() #정렬
print(selected) #표시
함수형like 프로그래밍
Ruby
puts (1..45).to_a.sample(5).sort.join(',')
Javascript (lodash.js)
alert(_(1).range(46).sampleSize(5).sortBy());
Python (pydash)
from pydash import _
print(_(range(1,46)).sample(5).sort().value())
표현법이 좀 다르긴 하지만 모두 같은 알고리즘
'프로그래밍/알고리즘' 카테고리의 다른 글
THE100YEARSWAR 백년전쟁 풀이 (1) | 2015.07.30 |
---|---|
비트마스크 사용법 (0) | 2015.07.27 |
조합, 이항계수 계산 코드 (0) | 2015.07.15 |
독이 든 술 단지를 찾아라 (1) | 2015.07.12 |
이클립스 유용 플러그인들 (0) | 2015.07.07 |