2个阵列中的所有可能组合

时间:2017-01-06 10:56:07

标签: java c# nested-loops

我有2个阵列:

  A {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 
  B {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

我想让用户能够输入一个x数字,然后程序应该打印出= x的所有可能的乘法。 = x应该由数组A的2个数字1和数组B中的另一个数字组成。数字不能相同。

我一直在搜索,我认为唯一可行的是嵌套循环。 我正在用C#做这个小项目,但我很不在乎它是否用Java理解Java。 在此先感谢您的帮助。

int num_user;
        int[] x = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, };
        int[] y = new int[9];
        Console.WriteLine("Hello please input the number  you think could be the solution :) ");
        num_user = Convert.ToInt32(Console.ReadLine());
        for (int a = 0; a < x.Length; a++ )
            for (int b = 0; b < y.Length; b++)
                if num_user == a*b //and here is where I get lost

5 个答案:

答案 0 :(得分:2)

int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] b = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

int target = 5; //The number you want the 2 numbers to multiply to

var query =
    from x in a
    from y in b
    where y != x && x * y == target
    select new { x, y };

foreach (var pair in query) Console.WriteLine(pair);

答案 1 :(得分:0)

一个简单的嵌套循环适用于此

for (int x = 0; x < 10; x++)
{
    for (int y = 0; y < 10; y++)
    {
        if (x != y && x*y == your_number) System.out.format("%d * %d = %d\n",x,y,your_number);
    }
}

代码没有经过测试,但是这样应该可行。 你必须自己实现数组:)

答案 2 :(得分:0)

using System;
using System.Collections.Generic;

public class Test
{
    public static void Main()
    {
        string input = string.Empty;
        int output = 0;
        do
        {
            Console.WriteLine("Enter number: ");
            input = /* Console.ReadLine(); */ "8";
        } while (!int.TryParse(input, out output));
        int[] first = new int[] {0,1,2,3,4,5,6,7,8,9};
        int[] second = new int[] {0,1,2,3,4,5,6,7,8,9};
        var list = new List<string>();
        for (int i = 0; i < first.Length; i++)
            for (int j = 0; j < second.Length; j++)
                if (first[i] * second[j] == output)
                    list.Add(first[i] + " x " + second[j] + " = " + output);
        foreach (var str in list) {
            Console.WriteLine(str);
        }
    }
}


观看现场演示here

此代码接受用户输入(设置为“8”用于测试目的)并循环遍历第一个数组项,然后遍历第二个数组。对每个项进行乘法运算第一个使用这个嵌套循环逻辑的第二个项目。
希望这对你有所帮助。

答案 3 :(得分:0)

我会选择双循环,就像其他几个答案一样。

如果你想避免双循环(出于某种特殊原因),可以在没有它的情况下完成。在Java中:

var PDF = require('react-pdf');

var MyApp = React.createClass({
  render() {

    return '<PDF content="YSBzaW1wbGUgcGRm..." page="1" scale="1.0" onDocumentComplete={this._onDocumentComplete} onPageComplete={this._onPageComplete} loading={(<span>Your own loading message ...</span>)} />';
  },
  _onDocumentCompleted(pages){
    this.setState({pages});
  },
  _onPageCompleted(page){
    this.setState({currentPage: page});
  }
});

上面的代码对 int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // not using b int x = 8; for (int firstFactor : a) { if (firstFactor != 0 && x % firstFactor == 0) { int secondFactor = x / firstFactor; if (0 <= secondFactor && secondFactor <= 9 && secondFactor != firstFactor) { System.out.println("" + firstFactor + " * " + secondFactor); } } } 等于0不起作用,你必须特别处理这种情况(在双循环方法中你不必这样做)。对于x等于8,代码打印:

x

答案 4 :(得分:0)

我建议使用 Linq ,同时避免笛卡尔加入(如果AB很大会怎么样?):

  int[] A = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  int[] B = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

  int goal = 10;

  var result = A
    .Where(a => a != 0 && goal % a == 0) // a from A is divider of the goal 
    .Where(goal / a != a)                // a and b can't be the same 
    .Where(a => B.Contains(goal / a))    // b is in B
    .OrderBy(a => a)                     // let be nice
    .Select(a => string.Format("{0} {1}", a, goal / a));

测试

  Console.Write(string.Join(Environment.NewLine, result));

结果

  2 5
  5 2

压力测试:

  int[] A = Enumerable.Range(0, 1000000).ToArray();
  int[] B = Enumerable.Range(0, 1000000).ToArray();

  int goal = 2016;

将在几毫秒内返回

1 2016
2 1008
3 672
4 504
6 336
7 288
8 252
9 224
... 
504 4
672 3
1008 2
2016 1