15650번 문제의 변형. 백트래킹 문제.
#include <stdio.h>
int N,M,P[9]={0};
void d(int s) {
int i=1;
if(s==M+1) {
for(;i<=M;i++) printf("%d ",P[i]);
printf("\n");
return;
}
for(i=1;i<=N;i++) {
if(P[s-1]<=i) {
P[s]=i;
d(s+1);
}
}
}
int main() {
scanf("%d%d",&N,&M);
d(1);
}
15650번 문제에서도 동일하게, 매개변수만 하나 더 추가하면 코드 양을 줄일 수 있다.
#include<stdio.h>
int n, m;
int a[9];
void go(int now, int cnt)
{
if (cnt > m)
{
for (int i = 1; i <= m; i++)
{
printf("%d ", a[i]);
}
puts("");
return;
}
for (int i = now; i <= n; i++)
{
a[cnt] = i;
go(i, cnt + 1);
}
}
int main(){
scanf("%d %d", &n, &m);
go(1,1);
}