0分的蒟蒻求助

P1157 组合的输出

你的代码只有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


| 下一页