题意
在1~n的数中选 r 个数按从大到小输出所有组合。
思路
本着学习搜索的想法来刷题,嗯,过程也还算和睦,我的脑子和笔记本相处的也还算融洽,但是卡在dfs 函数里苦思冥想时,一个突发奇想在for()循环后加个处理语句,竟然让我过了????这恐怕是我对的最懵逼的一题了。
code
#include<stdio.h>
#define MAX 15
int number[MAX];
int count=0;
bool check(int x)
{
for(int i=1;i<x;i++)
{
if(number[i]>=number[i-1])
{
return false;
}
}
return true;
}
void print(int r)
{
for(int i=0;i<r;i++)
printf("%d",number[i]);
printf("\n");
}
void dfs(int n,int r) // n=5 r=3
{
for(int i=n;i>=1;i--)
{
number[count]=i;
count++;
if(check(count))
{
if(count==r)
{
print(r);
count--;
}
else
{
dfs(n,r);
}
}
else
count--;
}
count--; //试了几回没过,突发奇想加上这一条件。。居然Accept了??? 一脸懵逼。。。
}
int main()
{
int n,r;
scanf("%d%d",&n,&r);
dfs(n,r);
return 0;
}