干饭小薛ā 2021-10-10 09:20 采纳率: 0%
浏览 21
已结题

回溯法求组合问题1-你中取K个不同的数

求循环里面的if(a[i]-i<=n-r+1)//可以向试探
为何判断条件是a[i]-i<=n-r+1

#include<bits/stdc++.h>
#define max 50
int a[max];
void F(int n, int r)
{
int i,j;
i=0;
a[i]=1;
while(1)
{
if(a[i]-i<=n-r+1) //可以向前试探//
{
if(i==(r-1)) //找到一个组合//
{
for(j=0;j<r;j++) //输出当前组合r个一个组合//
printf("%4d",a[j]);
printf("\n");
a[i]++;
continue;
}
i++; //向前试探//
a[i]=a[i-1]+1;
}
else //回溯//
{
if(i==0) //找完全部解//
return;
a[--i]++;
}
}
}
int main(void)
{
int n,r;
printf("Enter n r :");
scanf("%d%d",&n,&r);
printf("正整数1~%d中的%d个数的任意组合:\n",n,r);
F(n,r);
}

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-10-10 09:23
    关注

    也不知道你要问什么

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月20日
  • 创建了问题 10月10日

悬赏问题

  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?