gpt4 book ai didi

c++ - 嵌套循环是否有替代方法来显示 n 范围内可能的组合?

转载 作者:行者123 更新时间:2023-12-02 18:31:37 25 4
gpt4 key购买 nike

我创建了一些代码,每当您在 pinCombo(x) 中输入数字(例如 pinCombo(3))时,输出将是:

000
001
002

...直到达到 999。

因此,pinCombo(4) 输出将是:

0000
0001
....
....
9999

这是我的代码:

#include <iostream>

using namespace std;

void pinCombo(int x)
{
int a,b,c,d,e,f,g,h,i,j;

if(x>=1)
for (a = 0;a<10;a++)
{
if(x>=2)
for (b = 0;b<10;b++)
{
if(x>=3)
for (c = 0;c<10;c++)
{
if(x>=4)
for (d = 0;d<10;d++)
{
if(x>=5)
for (e = 0;e<10;e++)
{
if(x>=6)
for (f = 0;f<10;f++)
{
if(x>=7)
for (g = 0;g<10;g++)
{
if(x>=8)
for (h = 0;h<10;h++)
{
if(x>=9)
for (i = 0;i<10;i++)
{

if(x>=10)
for (j = 0;j<10;j++)
{
cout<<a<<b<<c<<d<<e<<f<<g<<h<<i<<j<<endl;
}if(x==9)cout<<a<<b<<c<<d<<e<<f<<g<<h<<i<<endl;
}if(x==8)cout<<a<<b<<c<<d<<e<<f<<g<<h<<endl;
}if(x==7)cout<<a<<b<<c<<d<<e<<f<<g<<endl;
}if(x==6)cout<<a<<b<<c<<d<<e<<f<<endl;
}if(x==5)cout<<a<<b<<c<<d<<e<<endl;
}if(x==4)cout<<a<<b<<c<<d<<endl;
}if(x==3)cout<<a<<b<<c<<endl;
}if(x==2)cout<<a<<b<<endl;
}if(x==1)cout<<a<<endl;
}

}

using namespace std;

int main()
{
pinCombo(3);
return 0;
}

有没有一种方法可以在不使用嵌套循环或不使用许多变量的情况下创建这样的程序?

最佳答案

您可以使用 % 来实现此目的运算符:

#include <iostream>
#include <cmath>

void pinCombo(int x)
{
int* digits = new int[x];
int limit = std::pow(10, x);

for (int n = 0; n < limit; n++) {
int nn = n;

for (int i = 0; i < x; i++) {
digits[i] = nn % 10;
nn /= 10;
}

for (int i = x-1; i >= 0; i--) {
std::cout << digits[i];
}

std::cout << "\n";
}

delete[] digits;
}

int main()
{
pinCombo(3);
}

这将输出:

000
001
002
...
999

编辑:您可以使用 <iomanip> 实现同样的效果。设施:

void pinCombo(int x)
{
int limit = std::pow(10, x);
for (int i = 0; i < limit; i++)
std::cout << std::setw(x) << std::setfill('0') << i << std::endl;
}

旁注:使用 using namespace std 被认为是一种不好的做法。因为它会用 C++ 标准中包含的所有内容污染全局命名空间。要么使用std::前缀,或 using std::<whataver_you_want>如果您喜欢快捷方式。

关于c++ - 嵌套循环是否有替代方法来显示 n 范围内可能的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69335019/

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