网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月14日漏签0天
c语言吧 关注:801,149贴子:4,371,337
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 4回复贴,共1页
<<返回c语言吧
>0< 加载中...

来人帮帮我😫😫

  • 只看楼主
  • 收藏

  • 回复
  • 梗小鬼
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
输入abcd,然后在其中任取三个元素进行全排列,输出所有情况
以下是我写的代码,可以运行但是不能输出
#include<iostream>
#include<string>
using namespace std;
bool a[100];
char b[100];
string d;
void dfs(int p,int r)
{
if(p==r-1)
{
for(int i=0;i<r;i++)
{
cout<<b[i];
if(i==r-1)cout<<endl;
return;
}
}
for(int i=0;i<r;i++)
{
if(a[i]!=0)
{
b[i]=d[i];
a[i]=1;
dfs(p+1,r);
a[i]=0;
}
}
}
int main()
{
cin>>d;
int r;
cin>>r;
dfs(0,r);
return 0;
}


  • 梗小鬼
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
感觉直接复制有点抽象,上个图



2025-11-14 00:45:19
广告
不感兴趣
开通SVIP免广告
  • 究极小白
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
r是什么?


  • 工作公魔
  • 酱油
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
if(a[i]!=0) 改为 if (!a[i]),并且在递归之前设置 a[i] = true,递归之后再将其设置为 false


  • 洪水证人
  • 团子家族
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你没有改变过任何东西的排列。显然也不是“任取3个”的做法。看上去似乎你想做的是全组合而非排列。当然组合也错了,因为循环条件错误,所以导致反反复复的重复组合。你在这里要么循环,要么递归,二选一。
如果你想做的就是全组合,那么一个数组都不需要,只用一个整数从1循环到n(n等于(1<<r)-1),然后测试其中每个位是否为1就行了。
总数是不是4个,同样没谱。你用了一些C++代码,但你明显不知道自己在干什么。在这种情况下,根本不应该让用户输入r,应该令r=int(d.size())。
还有数组b完全没有存在的必要,你已经知道可以用d[i]取字符了,拷贝到b干什么呢?而且还是没完没了地反复拷贝。你非得想拷贝的话,应该用strcpy或者std::copy,取决于你到底在学哪种语言。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 4回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示