[C言語]白駿15651:NとM(3)
まずNとM(3)を行いました.これは1~4の中で簡単に見えるからです.
条件なしで出力するだけなので、これを先につかむべきだと思います.
n値とm値を入力すると、どうすればいいか分かりません.
そしてバックトラッキングとは何か分かりません.だからグーグルゲームをしました印刷方法がわかれば残りの1,2,4号も例外処理をするだけなので、答えを見て理解するようにします.
答えを理解して、自分で解いたコード
#include <stdio.h>
int arr[7] = {0, };
void BT(int n, int m, int d)
{
int i, k;
i = 1;
while(i <= n)
{
arr[d] = i; // 이 값은 기준값이 된다.
if (m - 1 == d) // m이 1씩 커질수록, BT를 한번씩 더 호출한다.
{
k = 0;
while(k < m) // k는 배열을 출력한다. 그러기에 0부터 시작한다.
{
printf("%d ", arr[k]);
k++;
}
printf("\n");
}
else
{
BT(n, m, d + 1);
}
i++;
}
}
int main()
{
int n,m;
scanf("%d %d", &n, &m);
BT(n, m, 0);
}
説明:
簡単に例を挙げる.n=3,m=2の場合、出力は1/12/13/2/2/2/2/2/2/3/3/3となる.
BT3 2 0重複文に入ります.arr[0] = 1. BTで回帰する
繰り返し文が始まるarr[1]=1,2(m)−1=1(d)であるためifが必要である.
arr[0]、arr[1]をk後に出力します.ここまで1/を出力しました.
i++に増加するとarr[1]=2となり、再出力kはarr[0],arr[1],出力1/2となる.出力を1/4に繰り返します.そしてBT終了後、2番目のコールの復帰が終了する.
i++がarr[0]=2の場合、再びBTが呼び出される.
arr[1]=1,さらにkで2/を出力し,上記3~5回のプロセスを2/に繰り返す.
BTはまた终わった手順を6~7回繰り返します.
終わります.
Reference
この問題について([C言語]白駿15651:NとM(3)), 我々は、より多くの情報をここで見つけました https://velog.io/@kimmainsain/C언어-백준-15651-N과-M-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol