gpt4 book ai didi

C++ 新手需要帮助打印整数组合

转载 作者:搜寻专家 更新时间:2023-10-31 00:23:30 25 4
gpt4 key购买 nike

假设我得到:

  1. 整数范围 iRange(即从 1iRange)和
  2. 所需数量的组合

我想找出所有可能组合的数量并打印出所有这些组合。

例如:

给定:iRange = 5n = 3

那么组合的个数就是iRange!/((iRange!-n!)*n!) = 5!/(5-3)! * 3! = 10 组合,输出为:

123 - 124 - 125 - 134 - 135 - 145 - 234 - 235 - 245 - 345

另一个例子:

给定:iRange = 4n = 2

那么组合的个数就是iRange!/((iRange!-n!)*n!) = 4!/(4-2)! * 2! = 6 组合,输出为:

12 - 13 - 14 - 23 - 24 - 34

到目前为止我的尝试是:

#include <iostream>
using namespace std;

int iRange= 0;
int iN=0;

int fact(int n)
{
if ( n<1)
return 1;
else
return fact(n-1)*n;
}

void print_combinations(int n, int iMxM)
{
int iBigSetFact=fact(iMxM);
int iDiffFact=fact(iMxM-n);
int iSmallSetFact=fact(n);
int iNoTotComb = (iBigSetFact/(iDiffFact*iSmallSetFact));
cout<<"The number of possible combinations is: "<<iNoTotComb<<endl;
cout<<" and these combinations are the following: "<<endl;


int i, j, k;
for (i = 0; i < iMxM - 1; i++)
{
for (j = i + 1; j < iMxM ; j++)
{
//for (k = j + 1; k < iMxM; k++)
cout<<i+1<<j+1<<endl;
}
}
}

int main()
{
cout<<"Please give the range (max) within which the combinations are to be found: "<<endl;
cin>>iRange;
cout<<"Please give the desired number of combinations: "<<endl;
cin>>iN;
print_combinations(iN,iRange);
return 0;
}

我的问题:我的代码中与组合打印相关的部分仅适用于 n = 2, iRange = 4 并且我无法使其正常工作,即对于任何 niRange

最佳答案

您的解决方案仅适用于 n=2。考虑使用带有 n 个整数的数组(梳子),然后循环将勾选数组中的最后一项。当该项目达到最大更新时,然后组合 [n-2] 项目并将最后一个项目设置为先前的值 +1。

基本上像时钟一样工作,但您需要逻辑来找到要提高的值以及下一个最小值是多少。

关于C++ 新手需要帮助打印整数组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1876474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com