我被数组卡住了,需要一些帮助。
我有两个数组,我正在使用foreach循环进行比较。我想让程序写";你赢了;仅当winningNumbers
中有两个数字与someNumbers
匹配时。如果只有一个匹配,则输出应该是"1";你输了">
(我必须使用循环来解决这个问题(
int[] someNumbers = { 1, 2, 3, 4, 5, 6 };
int[] winningNumbers = { 1, 2, 13, 14, 15, 16 };
bool winning = false;
foreach (var item1 in someNumbers)
{
foreach (var item2 in winningNumbers)
{
if (item1 == item2)
{
winning = true;
}
}
}
if (winning == true )
{
Console.WriteLine("You won");
}
else
{
Console.WriteLine("You lost");
}
为每个匹配使用一个计数器。如果是>=2然后报告获胜。如果您要求它恰好是两个匹配项,请删除>操作人员请在此处尝试:https://dotnetfiddle.net/sjYbYk
edit:字符串生成器添加到报告获胜比赛。
using System;
using System.Text;
public class Program
{
public static void Main()
{
int[] someNumbers = { 1, 2, 3, 4, 5, 6 };
int[] winningNumbers = { 1, 2, 13, 14, 15, 16 };
int matched = 0;
StringBuilder sb = new StringBuilder();
sb.Append("You Matched ");
foreach (var item1 in someNumbers)
{
foreach (var item2 in winningNumbers)
{
if (item1 == item2)
{
matched++;
sb.Append(item1 + ",");
}
}
}
if (matched >= 2 )
{
Console.WriteLine("You won");
Console.WriteLine(sb.ToString().TrimEnd(','));
}
else
{
Console.WriteLine("You lost");
}
}
}
由于循环遍历每个数组,因此每次遇到匹配时只需增加一个计数器。
int[] someNumbers = { 1, 2, 3, 4, 5, 6 };
int[] winningNumbers = { 1, 2, 13, 14, 15, 16 };
int matches = 0;
foreach (var item1 in someNumbers)
{
foreach (var item2 in winningNumbers)
{
if (item1 == item2)
{
matches++;
}
}
}
if (matches == 2 )
{
Console.WriteLine("You won");
}
else
{
Console.WriteLine("You lost");
}
我意识到两个数组都是按升序排序的。如果是这样的话,我更喜欢两个指针的方法来获得更好的性能。
时间复杂度-O(m+n(:其中m,n是两个数组的长度。
若并没有对数组进行排序,你们可以使用其他答案中提到的暴力方法,或者先对数组排序,然后使用下面的方法。
蛮力-O(m*n(的时间复杂性
排序的时间复杂性和双指针方法-O(mLogm+nLogon(
int[] someNumbers = { 1, 2, 3, 4, 5, 6 };
int[] winningNumbers = { 1, 2, 13, 14, 15, 16 };
int matches = 0;
int i=0,j=0;
while(i<someNumbers.Length && j<winningNumbers.Length)
{
if(someNumbers[i]==winningNumbers[j])
{
matches++;
i++;
j++;
}
else if(someNumbers[i]<winningNumbers[j])
{
i++;
}
else if(someNumbers[i]>winningNumbers[j])
{
j++;
}
}
if (matches >=2 )
{
Console.WriteLine("You won");
}
else
{
Console.WriteLine("You lost");
}
根据您的代码,只会打印一个案例。将结果保存在一个新数组中,然后打印。
int[] someNumbers = { 1, 2, 3, 4, 5, 6 };
int[] winningNumbers = { 1, 2, 13, 14, 15, 12};
ArrayList compare_result = new ArrayList();
//two loop to compare someNumbers and winningNumbers
for (int x = 0; x < someNumbers.Length; x++)
{
for (int y = 0; y < winningNumbers.Length; y++)
{
if (someNumbers[x] == winningNumbers[y])
{
compare_result.Add(someNumbers[x]);
}
}
}
//print comparing result
if (compare_result.Count > 0)
{
Console.WriteLine("you win:");
for (int i = 0; i < compare_result.Count; i++)
{
Console.WriteLine(compare_result[i]);
}
}
else
{
Console.WriteLine("You lost");
}