你的代码只有3层循环,而题目中要求我们进行r层循环,所以显然爆0是很正常的
(我的代码)
```cpp
#include <bits/stdc++.h>
using namespace std;
int n, r;
int ans[25];
void dfs(int pos, int x) // 枚举到第几个数,上一个枚举的数是几
{
if (pos == r + 1)
{
for (int i = 1; i <= r; ++i)
{
cout << setw(3) << ans[i];
}
cout << '\n';
return;
}
for (int i = x + 1; i <= n; ++i)
{
ans[pos] = i;
dfs(pos + 1, i);
}
}
int main()
{
cin >> n >> r;
dfs(1, 0);
return 0;
}
```
一般来说对于这种对于循环次数不确定的题目,通常会采用递归写法(while循环也可以,不太常用罢了,可以看这篇:[https://www.luogu.com.cn/blog/hypercubestudio/solution-p1157](https://www.luogu.com.cn/blog/hypercubestudio/solution-p1157))
~~当然,如果像这种题最多只有20层循环,我们可以判断需要几层循环,然后执行不同层数的循环(打表),就像这样:[https://www.luogu.com.cn/blog/UranusITS/solution-p1157](https://www.luogu.com.cn/blog/UranusITS/solution-p1157)~~
递归初学的时候确实难以理解,但是后面就能慢慢好了,递归的边界就如同循环的初值和终止一样。学了高中的函数之后肯定就可以轻松理解递归了
by Bodhi @ 2023-05-20 23:48:53
想过这问题了,就是搞不出正确代码
by shooting__star @ 2023-05-21 08:59:50
艾玛,100了
by shooting__star @ 2023-05-28 08:35:35
可曾听闻打表大法。
````#include "iostream"
#include "iomanip"
using namespace std;
int nn,rr;
int main(){
cin>>nn>>rr;
if(rr==1){
for(int a=1;a<=nn;a++)
cout<<setw(3)<<a<<endl;
return 0;
}
else if(rr==2){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
cout<<setw(3)<<a<<setw(3)<<b<<endl;
return 0;
}
else if(rr==3){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<endl;
return 0;
}
else if(rr==4){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<endl;
return 0;
}
else if(rr==5){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<endl;
return 0;
}
else if(rr==6){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<endl;
return 0;
}
else if(rr==7){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<endl;
return 0;
}
else if(rr==8){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<endl;
return 0;
}
else if(rr==9){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<endl;
return 0;
}
else if(rr==10){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<endl;
return 0;
}
else if(rr==11){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<endl;
return 0;
}
else if(rr==12){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
for(int l=k+1;l<=nn;l++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<setw(3)<<l<<endl;
return 0;
}
else if(rr==13){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
for(int l=k+1;l<=nn;l++)
for(int m=l+1;m<=nn;m++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<setw(3)<<l<<setw(3)<<m<<endl;
return 0;
}
else if(rr==14){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
for(int l=k+1;l<=nn;l++)
for(int m=l+1;m<=nn;m++)
for(int n=m+1;n<=nn;n++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<setw(3)<<l<<setw(3)<<m<<setw(3)<<n<<endl;
return 0;
}
else if(rr==15){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
for(int l=k+1;l<=nn;l++)
for(int m=l+1;m<=nn;m++)
for(int n=m+1;n<=nn;n++)
for(int o=n+1;o<=nn;o++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<setw(3)<<l<<setw(3)<<m<<setw(3)<<n<<setw(3)<<o<<endl;
return 0;
}
else if(rr==16){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
for(int l=k+1;l<=nn;l++)
for(int m=l+1;m<=nn;m++)
for(int n=m+1;n<=nn;n++)
for(int o=n+1;o<=nn;o++)
for(int p=o+1;p<=nn;p++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<setw(3)<<l<<setw(3)<<m<<setw(3)<<n<<setw(3)<<o<<setw(3)<<p<<endl;
return 0;
}
else if(rr==17){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
for(int l=k+1;l<=nn;l++)
for(int m=l+1;m<=nn;m++)
for(int n=m+1;n<=nn;n++)
for(int o=n+1;o<=nn;o++)
for(int p=o+1;p<=nn;p++)
for(int q=p+1;q<=nn;q++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<setw(3)<<l<<setw(3)<<m<<setw(3)<<n<<setw(3)<<o<<setw(3)<<p<<setw(3)<<q<<endl;
return 0;
}
else if(rr==18){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
for(int l=k+1;l<=nn;l++)
for(int m=l+1;m<=nn;m++)
for(int n=m+1;n<=nn;n++)
for(int o=n+1;o<=nn;o++)
for(int p=o+1;p<=nn;p++)
for(int q=p+1;q<=nn;q++)
for(int r=q+1;r<=nn;r++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<setw(3)<<l<<setw(3)<<m<<setw(3)<<n<<setw(3)<<o<<setw(3)<<p<<setw(3)<<q<<setw(3)<<r<<endl;
return 0;
}
else if(rr==19){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
for(int l=k+1;l<=nn;l++)
for(int m=l+1;m<=nn;m++)
for(int n=m+1;n<=nn;n++)
for(int o=n+1;o<=nn;o++)
for(int p=o+1;p<=nn;p++)
for(int q=p+1;q<=nn;q++)
for(int r=q+1;r<=nn;r++)
for(int s=r+1;s<=nn;s++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<setw(3)<<l<<setw(3)<<m<<setw(3)<<n<<setw(3)<<o<<setw(3)<<p<<setw(3)<<q<<setw(3)<<r<<endl;
return 0;
}
else if(rr==20){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
for(int l=k+1;l<=nn;l++)
for(int m=l+1;m<=nn;m++)
for(int n=m+1;n<=nn;n++)
for(int o=n+1;o<=nn;o++)
for(int p=o+1;p<=nn;p++)
for(int q=p+1;q<=nn;q++)
for(int r=q+1;r<=nn;r++)
for(int s=r+1;s<=nn;s++)
for(int t=s+1;t<=nn;t++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<setw(3)<<l<<setw(3)<<m<<setw(3)<<n<<setw(3)<<o<<setw(3)<<p<<setw(3)<<q<<setw(3)<<r<<setw(3)<<t<<endl;
return 0;
}
else if(rr==21){
for(int a=1;a<=nn;a++)
for(int b=a+1;b<=nn;b++)
for(int c=b+1;c<=nn;c++)
for(int d=c+1;d<=nn;d++)
for(int e=d+1;e<=nn;e++)
for(int f=e+1;f<=nn;f++)
for(int g=f+1;g<=nn;g++)
for(int h=g+1;h<=nn;h++)
for(int i=h+1;i<=nn;i++)
for(int j=i+1;j<=nn;j++)
for(int k=j+1;k<=nn;k++)
for(int l=k+1;l<=nn;l++)
for(int m=l+1;m<=nn;m++)
for(int n=m+1;n<=nn;n++)
for(int o=n+1;o<=nn;o++)
for(int p=o+1;p<=nn;p++)
for(int q=p+1;q<=nn;q++)
for(int r=q+1;r<=nn;r++)
for(int s=r+1;s<=nn;s++)
for(int t=s+1;t<=nn;t++)
for(int u=t+1;u<=nn;u++)
cout<<setw(3)<<a<<setw(3)<<b<<setw(3)<<c<<setw(3)<<d<<setw(3)<<e<<setw(3)<<f<<setw(3)<<g<<setw(3)<<h<<setw(3)<<i<<setw(3)<<j<<setw(3)<<k<<setw(3)<<l<<setw(3)<<m<<setw(3)<<n<<setw(3)<<o<<setw(3)<<p<<setw(3)<<q<<setw(3)<<r<<setw(3)<<t<<setw(3)<<u<<endl;
return 0;
}
return 0;
}
by hzyandltx @ 2023-07-22 17:56:07
@[hzyandltx](/user/951188) 你个狗,估计直接TLE了
by shooting__star @ 2023-07-25 11:21:20
直接编译失败了
by shooting__star @ 2023-07-25 11:22:21
@[liyirong567](/user/955954) 没有呢
by hzyandltx @ 2023-07-25 20:08:18
@[hzyandltx](/user/951188) ???我指的是提交
by shooting__star @ 2023-07-25 21:31:20
@[hzyandltx](/user/951188) 还有,你这打表大法人家上面都提到了
by shooting__star @ 2023-07-26 08:54:31
现在会了深搜
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,r,vis[25],ans[25];
void dfs(int x)
{
if(x==r+1)
{
for(int i=1;i<=r;i++)
{
printf("%3d",ans[i]);
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
if(!vis[i]&&i>ans[x-1])
{
vis[i]=1;
ans[x]=i;
dfs(x+1);
vis[i]=0;
ans[x]=0;
}
}
}
int main()
{
cin>>n>>r;
dfs(1);
}
```
by shooting__star @ 2023-07-26 09:11:51