增量数字变化循环? (所有排列)
Incremental number change loop? (all permutations)
我有一个数组,在给定以下约束的情况下,我需要该数组的所有可能排列:
可能的值为:0.25,0.5,0.75,1.0,1.25,1.5,1.75,2.0。
数组有 18 个元素。每个元素都可以包含上述值之一。允许重复,例如:0.25,0.25,0.5等...
我需要执行什么类型的迭代来覆盖每个排列(而不是组合)?
for(...)
{
std::vector<float> array;
for(...)
array.push_back...
}
etc
我的问题不是寻找给定数组的所有排列:
我只想:
for example:
0.25 0.25 0.25
0.5 0.25 0.25
1.0 0.25 0.25
...
All the way to
2.0 2.0 2.0
这是一个程序,可以将所有这些组合(累了,它们太多了)打印到一个名为 combinations.txt 的文件中。但请注意,这需要一段时间,并且输出会很大,因为有很多这样的组合。至于它是如何工作的,这是一个快速而肮脏的解决方案,我有一个包含 18 个元素的 int 数组。我使用了 int,因为它更容易进行整数运算,但输出会通过除以 100 转换为您想要的格式。现在,应用程序打印出文件中的每个组合,然后将第一个数组元素递增 25 。如果元素超过 200(或 2.00 为你),它将该元素设置为 25,并将数组中的下一个元素递增 25。它就像计数一样工作,当你达到 9 时,第一个数字环绕并添加一个到下一个更高的权力。
#include <cstdio>
#include <cmath>
FILE *pOut;
void PrintCombinationToFile ( int *pArray )
{
fprintf ( pOut, "\n" );
for ( unsigned i = 0; i < 18; i++ )
fprintf ( pOut, "%.2f ", pArray[i] * 1.0 / 100.0 );
}
int IncrementArray ( int *pArray )
{
unsigned i = 0;
pArray[0] += 25;
while ( pArray[i] > 200 )
{
if ( i == 18 )
return 0;
pArray[i] = 25;
pArray[i+1] += 25;
i++;
}
return 1;
}
int main()
{
int initialArray[18];
int i;
pOut = fopen ( "combinations.txt", "w" );
if ( !pOut )
{
printf ( "\nUnable to open a new file." );
return 1;
}
for ( i = 0; i < 18; i++ )
initialArray[i] = 25;
PrintCombinationToFile(initialArray);
while(IncrementArray(initialArray))
PrintCombinationToFile(initialArray);
fflush ( pOut );
fclose ( pOut );
printf ( "Done!")
return 0;
}
我有一个数组,在给定以下约束的情况下,我需要该数组的所有可能排列:
可能的值为:0.25,0.5,0.75,1.0,1.25,1.5,1.75,2.0。
数组有 18 个元素。每个元素都可以包含上述值之一。允许重复,例如:0.25,0.25,0.5等...
我需要执行什么类型的迭代来覆盖每个排列(而不是组合)?
for(...)
{
std::vector<float> array;
for(...)
array.push_back...
}
etc
我的问题不是寻找给定数组的所有排列:
我只想:
for example:
0.25 0.25 0.25
0.5 0.25 0.25
1.0 0.25 0.25
...
All the way to
2.0 2.0 2.0
这是一个程序,可以将所有这些组合(累了,它们太多了)打印到一个名为 combinations.txt 的文件中。但请注意,这需要一段时间,并且输出会很大,因为有很多这样的组合。至于它是如何工作的,这是一个快速而肮脏的解决方案,我有一个包含 18 个元素的 int 数组。我使用了 int,因为它更容易进行整数运算,但输出会通过除以 100 转换为您想要的格式。现在,应用程序打印出文件中的每个组合,然后将第一个数组元素递增 25 。如果元素超过 200(或 2.00 为你),它将该元素设置为 25,并将数组中的下一个元素递增 25。它就像计数一样工作,当你达到 9 时,第一个数字环绕并添加一个到下一个更高的权力。
#include <cstdio>
#include <cmath>
FILE *pOut;
void PrintCombinationToFile ( int *pArray )
{
fprintf ( pOut, "\n" );
for ( unsigned i = 0; i < 18; i++ )
fprintf ( pOut, "%.2f ", pArray[i] * 1.0 / 100.0 );
}
int IncrementArray ( int *pArray )
{
unsigned i = 0;
pArray[0] += 25;
while ( pArray[i] > 200 )
{
if ( i == 18 )
return 0;
pArray[i] = 25;
pArray[i+1] += 25;
i++;
}
return 1;
}
int main()
{
int initialArray[18];
int i;
pOut = fopen ( "combinations.txt", "w" );
if ( !pOut )
{
printf ( "\nUnable to open a new file." );
return 1;
}
for ( i = 0; i < 18; i++ )
initialArray[i] = 25;
PrintCombinationToFile(initialArray);
while(IncrementArray(initialArray))
PrintCombinationToFile(initialArray);
fflush ( pOut );
fclose ( pOut );
printf ( "Done!")
return 0;
}