C语言中的组合求和
假设我们有4个应用程序可以生成100个数据点。现在我们总共有400个数据点。 但是如果我们想知道在下面所有这些情况下,数据点的总和是多少 100*100*100*100. 你会怎么做 每个应用程序的100个数据点是C语言中的组合求和,c,combinations,cartesian-product,large-data,C,Combinations,Cartesian Product,Large Data,假设我们有4个应用程序可以生成100个数据点。现在我们总共有400个数据点。 但是如果我们想知道在下面所有这些情况下,数据点的总和是多少 100*100*100*100. 你会怎么做 每个应用程序的100个数据点是[a][b]类型的数组形式,其中a和b是10,10 因此,对于每个应用程序,给定的数据点都是[app][a][b]。 总结起来似乎很简单:[app][a][b]+[app1][a][b]… 然而,这就是我被困的地方。例如,我不知道如何得到total的组合 如何计算C中数据组合的总和,即
[a][b]
类型的数组形式,其中a
和b是10,10
因此,对于每个应用程序,给定的数据点都是[app][a][b]
。
总结起来似乎很简单:[app][a][b]+[app1][a][b]…
然而,这就是我被困的地方。例如,我不知道如何得到total的组合
如何计算C
中数据组合的总和,即100*100*100
数据集
我错过了一些数学课。如果你能帮我,那就太好了
编辑:
好的,现在我们有了基本知识,我们可以分析问题: 给定N行M列的T个表,使用每个表中的1个元素,所有可能的和的总和是多少 我们有这样的模式:
17+83+88
17+83+98
....
17+83+37
注意,在这个模式中,来自第一个循环的数字17将在剩余程序的每一个其他组合中出现一次。但到底有多少
第二个程序将出现100个不同的事件,第三个程序的100个事件中的每一个都会出现,以此类推
如果您只是对不同程序中的数据集重新排序,您将得到完全相同的模式,因此我们可以得出结论,所有可能组合的总和=(M*N)^(T-1)*(所有元素的总和)
我们可以将其写成三重for循环:
unsigned int T, N, M; // These are known.
//Assuming the input is of the form
float data[T][M][N];
long double result = 0.0;
for (int app = 0; app < T; app++) {
for (int row = 0; row < M; row++) {
for (int col = 0; col < N; col++ ) {
result += data[app][row][col];
}
}
}
result *= pow(N*M, T-1);
无符号整数T,N,M;//这些都是众所周知的。
//假设输入是表单的
浮动数据[T][M][N];
长双结果=0.0;
对于(int-app=0;app
我不确定我是否正确理解了这一点,如果我错了,请纠正我:
您有X=4
数量的。。。比如说桌子;然后每个表都有Y=10
行数,每行都有Z=10
列数。您需要从每个表中获取一个元素并将它们添加到一起。每次将X=4
元素添加到一起时,每个表中都有一个元素。您希望对这些总和进行分组,然后将这些总和相加为一个更大的/最终的总和。我说得对吗
如果是这样,这意味着最终你将得到(Y*Z)^X
,即(10*10)^4=100000
给定值的单个总和,你在问题中将其视为组合,而它们实际上是每个组合的总和。最后,你想要每个组合的总和,这就是你想要的吗
那么,以下是我的想法,可能会对你有所帮助:
a[tableindex][rowindex][columnindex]
应表示给定单元格中的数字,索引应以零为基础。在生成每个组合的总和时,情况如下所示:
a[0][row0][column0] + a[1][row1][column1] + a[2][row2][column2] + a[3][row3][column3]
表索引将保持不变,行和列索引中的每一个都将从行的0
到Y-1=9
,再到列的Z-1=9
。现在我想问你,作为一个术语,我们会遇到多少次a[0][0][0]
和row0
必须是column0
,常数0
、row1
和row2
将能够在row3
到0
的范围内变化,9
可能的值Y=10
、column1
和column2
的范围将从column3
到0
,9
可能的值Z=10
1*1*(10*10*10)*(10*10*10)=1000 000
就是答案。一个通用公式可以写成(Y*Z)^(X-1)
,(Y*Z)
,因为它是一个表中的单元格数量,提高到(X-1)
的幂次,因为除了我们固定的表之外,还有很多表
因为每个表都有相同数量的单元格,而且这个例子对每个术语都适用;您只需将每个单元格相加,然后将结果乘以(Y*Z)^(X-1)
,对于您的情况,这是一百万。如果您的数字足够小,不会导致溢出,则以下代码可以做到这一点:
#define tablecount 4
#define rowcount 10
#define columncount 10
int main(int argc, char const *argv[])
{
int a[tablecount][rowcount][columncount] = { 0 };
// Assuming it gets filled somewhere in between
int thenumber = 0;
for (int table = 0; table < tablecount; table++)
for (int row = 0; row < rowcount; row++)
for (int column = 0; column < columncount; column++)
thenumber += a[table][row][column];
for (int i = 1; i < tablecount; i++) // notice that the initial value for i is 1
thenumber *= rowcount * columncount;
return 0;
}
#定义tablecount 4
#定义行数10
#定义列计数10
int main(int argc,char const*argv[]
{
int a[tablecount][rowcount][columncount]={0};
//假设它在两者之间的某个地方被填满
整数=0;
for(int table=0;table
确保在数组之间填充,并在需要时包含适当的库。如果我不清楚,请告诉我。我会做一个较小的例子。你首先要考虑的是应用程序如何输出他们的“数据点”。然后,您必须考虑如何将数据导入求和程序。一旦加载到求和程序中,剩下的应该很简单。它是否只会是4个应用程序?或者可以有更多?它们是浮点数,Joachim Bytefire,可以有四个以上的应用程序。@JoachimPileborg:我知道如何做求和部分。这相当简单。我无法获得电源数据的组合,即100*100*100*100。。那么韩寒可以使用什么样的数据结构呢
#define tablecount 4
#define rowcount 10
#define columncount 10
int main(int argc, char const *argv[])
{
int a[tablecount][rowcount][columncount] = { 0 };
// Assuming it gets filled somewhere in between
int thenumber = 0;
for (int table = 0; table < tablecount; table++)
for (int row = 0; row < rowcount; row++)
for (int column = 0; column < columncount; column++)
thenumber += a[table][row][column];
for (int i = 1; i < tablecount; i++) // notice that the initial value for i is 1
thenumber *= rowcount * columncount;
return 0;
}