紧急求助!组合算法问题!

mnbhy 2008-03-09 09:32:23
// job2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"

using namespace std;
void main()
{
int n,r,t,j,k;
int a[100],b[100];

cout<<"input n,r:"; 从n个元素中取r个进行组合

cin>>n>>r;

for(t=1;t<=r;t++)
{
a[t]=t;
b[t]=n-r+t;
}

k=r;
j=0;
do

{
if (k=r)
{
j=j+1;
cout<<j<<"[";
for(t=1;t<=r;t++)
cout<<a[t]<<" ";
cout<<"]"<<endl;
}

if(a[k]<b[k])
{
a[k]+=1;

if(k<r)
{
for(k=k+1;k<=r;k++)
a[k]=a[k-1]+1;
}
}
else
k=k-1;
}

while(k=0);

}
输入 5 3
结果: 1 [1 2 3]
后面就不会接着输出来了,第一个 1为序号!
...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mnbhy 2008-03-09
  • 打赏
  • 举报
回复
k!=0后,刚才竟然无限循环,仔细检查了下,OK了,谢谢大家的帮助!
野男孩 2008-03-09
  • 打赏
  • 举报
回复
看注释~


void main()
{
int n,r,t,j,k;
int a[100],b[100];

cout < <"input n,r:"; //从n个元素中取r个进行组合

cin> > n> > r;

for(t=1;t <=r;t++)
{
a[t]=t;
b[t]=n-r+t;
}

k=r;
j=0;
do

{
if (k=r) //k==r
{
j=j+1;
cout < <j < <"[";
for(t=1;t <=r;t++)
cout < <a[t] < <" ";
cout < <"]" < <endl;
}

if(a[k] <b[k])
{
a[k]+=1;

if(k <r)
{
for(k=k+1;k <=r;k++)
a[k]=a[k-1]+1;
}
}
else
k=k-1;
}

while(k=0); //k!=0

}
mnbhy 2008-03-09
  • 打赏
  • 举报
回复
using namespace std;
void main()
{
int n,r,t,j,k;
int a[100],b[100];

cout < <"input n,r:"; 从n个元素中取r个进行组合

cin> > n> > r;

for(t=1;t <=r;t++) 这句是生成组合和上界直

do
{
....
if(a[k] <b[k]) 从最后递增1产生新的排列!

}
while(k=0); 这个语句组合

如果k!=0,那是死循环了哦!
  • 打赏
  • 举报
回复
判断有错误while(k=0);
这里应该是!=吧
另外算法也有问题.

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧