我对如何查看这些生成的数组的方法和过程有疑问。 基本上我想创建一个[a,b,c,(a + b + c)]的数组,以及[d,e,f,(d + e + f)]的第二个数组,如果是第三个array1和array2中的元素相同,将数组显示为字符串。
int num = 10;
for(int a = 0; a < num; a++){
for(int b = 0; b < num; b++){
for(int c = 0; c < num; c++){
if(a<=b && b<=c){
arrayOne[0] = a;
arrayOne[1] = b;
arrayOne[2] = c;
arrayOne[3] = (a+b+c);
}
}
}
}
for(int d = 0; d < num; e++){
for(int e = 0; e < num; e++){
for(int f = 0; f < num; f++){
if(d<=e && e<=f){
arrayTwo[0] = d;
arrayTwo[1] = e;
arrayTwo[2] = f;
arrayTwo[3] = (f -(d+e));
}
}
}
}
你可以看到我超越了stump.I我不太清楚我在哪里可以得到数组的每次迭代,并通过匹配每个数组中的总和并显示它们所在的相应数组来比较值。谢谢你们都在先进。
答案 0 :(得分:1)
如果a=1, b=3, c=4
和d=2, e=3, f=3
您想要按1 + 3 + 4 = 8 = 2 + 3 + 3
的方式打印某些内容,我是否能正确理解您的问题。首先,你现在正在做的是创建像评论中描述的Floris这样的两个数组。您要做的是将所有值存储在一个数组中,如下所示:
int max; \\ To determine the value of max see the edit below.
int array[][] = new int[max][num];
int index = 0;
for (int a=0; a < num; a++) {
for (int b=a; b < num; b++) {
for (int c=b; c < num; c++) {
array[index][0] = a;
array[index][1] = b;
array[index][2] = c;
array[index][3] = a + b + c;
index++;
}
}
}
for (int i = 0; i < max; i++) {
for (int j = i; j < max; j++) {
if (array[i][3] == array[j][3]) {
string outString = array[i][0] + " + " + array[i][1] + " + " + array[i][2] + " = " + array[i][3] + " = " + array[j][0] + " + " + array[j][1] + " + " + array[i][2];
System.out.println(outString);
}
}
}
您可以看到我通过从b
开始a
而从c
开始b
,从而提高了效果,因为您丢弃了b < a
或c < b
的所有值if
。这也应该消除你An,k
声明的需要(我说应该只因为我没有测试过这个)。由于三重嵌套循环的复杂性,我需要使用独立索引。
编辑2:忽略我。我把组合学做错了。设k
为[n]
中包含元素的无序长度An,k = An-1,k + An,k-1
的数量(这将达到您的要求)。然后是A1,n = 1
。我们知道An,1 = n(因为值是0,1,2,3,4,...,n)和n= num
(因为唯一的值可以是11111 ... 1 n次)。在这种情况下,我们对k = 3
和A_num,3 = A_num-1,3 + A_num,2
感兴趣,因此插入我们获得的值
A_5,3 = A_4,3 + A_5,2
= A_3,3 + A_4,2 + A_4,2 + A_5,1
= A_3,3 + 2(A_4,2) + 5
= A_2,3 + A_3,2 + 2(A_3,2) + 2(A_4,1) + 5
= A_2,3 + 3(A_3,2) + 2(4) + 5
= A_1,3 + A_2,2 + 3(A_2,2) + 3(A_3,1) + 2(4) + 5
= 1 + 4(A_2,2) + 3(3) + 2(4) + 5
= 1 + 4(A_1,2) + 4(A_2,1) + 3(3) + 2(4) + 5
= 1 + 4(1) + 4(2) + 3(3) + 2(4) + 5
= 5(1) + 4(2) + 3(3) + 2(4) + 5
递归地应用等式,直到你得到答案。例如,如果num为5:
(num + (num - 1)(2) + (num - 2)(3) + ... + (2)(num - 1) + num)
看起来这可能会简化为binomial(num, num)
{{1}},但我还没有完成确定的工作。
答案 1 :(得分:1)
int givenNumber = 10;
int []arrayOne = new int [4];
int []arrayTwo = new int [4];
int count = 0;
for ( int i = 0; i < givenNumber; i ++)
{
for ( int x = 0; x < givenNumber; x ++ )
{
for ( int a = 0; a < givenNumber; a++ ){
arrayOne[0] = (int)(a * java.lang.Math.random() + x);
arrayOne[1] = (int)(a * java.lang.Math.random() + x);
arrayOne[2] = (int)(a * java.lang.Math.random() + x);
arrayOne[3] = (int)(arrayOne[0]+arrayOne[1]+arrayOne[2]);
}
for ( int b = 0; b < givenNumber; b++ ){
arrayTwo[0] = (int)(b * java.lang.Math.random() + x);
arrayTwo[1] = (int)(b * java.lang.Math.random() + x);
arrayTwo[2] = (int)(b * java.lang.Math.random() + x);
arrayTwo[3] = (int)(arrayTwo[0]+arrayTwo[1]+arrayTwo[2]);
}
if (arrayOne[3] == arrayTwo[3])
{
for ( int a = 0; a < 2; a++ )
{
System.out.print(arrayOne[a] + " + ");
} System.out.print(arrayOne[2] + " = " + arrayOne[3] + " = ");
for ( int a = 0; a < 2; a++ )
{
System.out.print(arrayTwo[a] + " + ");
} System.out.print(arrayTwo[2]);
System.out.println("\n");
count += 1;
}
}
}
if (count == 0)
System.out.println(
"\nOops! you dont have a match...\n" +
"Please try running the program again.\n");