[C言語]白駿15649:NとM(1)
の写真は少しカットされていて、シーケンスを出力するだけでいいです.
NとM(3)を見た後、他は自分でできると思っていたのですが、まだそこまではないようです.
問題のタイプを熟知していても、歯を磨いても、短期間で実力をつけたい.問題のタイプを熟知してみましょう.
最初はグーグルがランキングを検索する方法でした.swapを使用してソートします.しかし、この問題はswapを使う必要はありません.最後に答えを見てから慣れることにした.時間を変えても好転の兆しがないからだ.
以前はNとM(3)を解く場所で(1)を見たことがあるが,それ以外にも多くの種類を検索したことがある.しかし確かに、最初から繰り返し文を回すよりも、ifに分けてから繰り返し文を回すほうが理解できる.だからこの方法を選びました.
N=4,M=2.
depth=0,i=1の場合
1. DFS[0]-> result[0]=1 -> check[1]=1 -> DFS(1)
2.DFS[1]->(i=2の場合)result[1]=2->check[2]=1->DFS(2)
3.DFS[2]->(1,2)出力
->2番に戻り、検出を初期化し、i++(1,3)、(1,4)で出力する
->1番に戻り、検出を初期化し、同じ方法(2,1)、(2,3)、(2,4)で出力します.
リピート!!!
これはビベログの解題方法です.確かにもっと直感的なようです.
同様にして,NとM(3)解を解いた.
最初から繰り返し文を回しifを処理する方法と
最初はifを掛ける方法と、複文を回す方法の2つを知っていました.2つの異なる点を理解し、状況に応じて使用します.
NとM(3)を見た後、他は自分でできると思っていたのですが、まだそこまではないようです.
問題のタイプを熟知していても、歯を磨いても、短期間で実力をつけたい.問題のタイプを熟知してみましょう.
最初はグーグルがランキングを検索する方法でした.swapを使用してソートします.しかし、この問題はswapを使う必要はありません.最後に答えを見てから慣れることにした.時間を変えても好転の兆しがないからだ.
他者コード
#include <stdio.h>
int n, m;
int result[1000];
int check[1000];
void DFS(int depth)
{
int i;
if (depth == m)
{
for (int i = 0; i < m; i++)
printf("%d ", result[i]);
printf("\n");
}
else
{
for (i = 1; i <= n; i++)
{
if (check[i] == 0)
{
result[depth] = i;
check[i] = 1;
DFS(depth + 1);
check[i] = 0;
}
}
}
}
int main(void)
{
scanf("%d %d", &n, &m);
DFS(0);
return 0;
}
ここでhttps://velog.io/@seochan99/15649-N-%EA%B3%BC-M-1の助けを得ました.以前はNとM(3)を解く場所で(1)を見たことがあるが,それ以外にも多くの種類を検索したことがある.しかし確かに、最初から繰り返し文を回すよりも、ifに分けてから繰り返し文を回すほうが理解できる.だからこの方法を選びました.
N=4,M=2.
depth=0,i=1の場合
1. DFS[0]-> result[0]=1 -> check[1]=1 -> DFS(1)
2.DFS[1]->(i=2の場合)result[1]=2->check[2]=1->DFS(2)
3.DFS[2]->(1,2)出力
->2番に戻り、検出を初期化し、i++(1,3)、(1,4)で出力する
->1番に戻り、検出を初期化し、同じ方法(2,1)、(2,3)、(2,4)で出力します.
リピート!!!
これはビベログの解題方法です.確かにもっと直感的なようです.
同様にして,NとM(3)解を解いた.
NとM(3)
#include <stdio.h>
int n, m;
int result[1000];
void DFS(int depth)
{
int i;
if (depth == m)
{
for (int i = 0; i < m; i++)
printf("%d ", result[i]);
printf("\n");
}
else
{
for (i = 1; i <= n; i++)
{
result[depth] = i;
DFS(depth + 1);
}
}
}
int main(void)
{
scanf("%d %d", &n, &m);
DFS(0);
return 0;
}
(1)checkをキャンセルし,すべての状況を出力した.逆にcheckでシーケンスを求める.最初から繰り返し文を回しifを処理する方法と
最初はifを掛ける方法と、複文を回す方法の2つを知っていました.2つの異なる点を理解し、状況に応じて使用します.
Reference
この問題について([C言語]白駿15649:NとM(1)), 我々は、より多くの情報をここで見つけました https://velog.io/@kimmainsain/C언어-백준-15649-N과-M-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol