我有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
答案 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 ,同时避免笛卡尔加入(如果A
和B
很大会怎么样?):
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