using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string[] array = { "1", "2", "3", "4", "5", "6", "7", "8" }; //不知道其中两组可以共用2个数字,使其和均为21是什么意思,自行补充...的内容 Combo(array, 5).Where(...).ToList().ForEach(x => Console.WriteLine(x)); } static IEnumerable<string> Combo(string[] array, int len) { int[] pos = new int[len]; for (int i = 0; i < len; i++) pos[i] = i; while (pos[0] < array.GetLength(0) - len) { string str = ""; for (int i = 0; i < len; i++) str += array[pos[i]] + " "; for (int i = len - 1; i >= 0; i--) { if (pos[i] < array.GetLength(0) - len + i) { pos[i]++; for (int j = i + 1; j <= len - 1; j++) { pos[j] = pos[i] + j - i; } break; } else { continue; } } yield return str; } } } }
static void Main(string[] args) { List<int> numList = new List<int>(8); for(int i = 1; i <= 8; i++) { numList.Add(i); } // 来那个层循环 取两个数所有可能性 两个数为m和n for(int m = 0; m < numList.Count; m++) { for(int n = m + 1; n < numList.Count; n++) { int sum = 0; for(int i = 0; i < numList.Count; i++) { if(i != m && i != n) { sum += numList[i]; } } int mNum = numList[m]; int nNum = numList[n]; int sub = 21 - mNum - nNum; if(sub * 2 == sum) { // 由这里可以看出 只有 1,5 2,4 两种可能 Console.WriteLine(string.Format("公共数字为{0}和{1};", numList[m], numList[n])); // 查找其他数据 还可以根据上面 用三层循环实现 List<int> tmpList = new List<int>(numList); tmpList.Remove(mNum); tmpList.Remove(nNum); int s = (int)Math.Pow(2, 6) / 2; for(int p = 0; p < s; p++) { List<int> result1 = new List<int>(); List<int> result2 = new List<int>(); int[] flags = ConvertInt(6, p); for(int q = 0; q < 6; q++) { if(flags[q] == 0) { result1.Add(tmpList[q]); } else if(flags[q] == 1) { result2.Add(tmpList[q]); } else { throw new Exception("数据处理出错"); } } if(Sum(result1) == sub) { Print(result1); Print(result2); Console.WriteLine(); } } } } } Console.ReadLine(); } static int[] ConvertInt(int num, int i) { int[] flags = new int[num]; while(i != 0) { flags[--num] = i % 2; i = i / 2; } return flags; } static int Sum(List<int> items) { int sum = 0; for(int i = 0; i < items.Count; i++) { sum += items[i]; } return sum; } static void Print(List<int> results) { string s = string.Empty; for(int j = 0; j < results.Count; j++) { if(results[j] != 0) { s += results[j] + ","; } } Console.WriteLine("{{{0}}}", s.Trim(',')); }
for (int i = 1; i <= 8; i++) { for (int d = 1; d <= 8; d++) { if ((36 + i + d) == 42) { if(i!=d) { MessageBox.Show(i.ToString() + "---" + d.ToString()); } } } }
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[] array = { "1", "2", "3", "4", "5", "6", "7", "8" };
//不知道其中两组可以共用2个数字,使其和均为21是什么意思,自行补充...的内容
Combo(array, 5).Where(...).ToList().ForEach(x => Console.WriteLine(x));
} static IEnumerable<string> Combo(string[] array, int len)
{
int[] pos = new int[len];
for (int i = 0; i < len; i++) pos[i] = i;
while (pos[0] < array.GetLength(0) - len)
{
string str = "";
for (int i = 0; i < len; i++) str += array[pos[i]] + " ";
for (int i = len - 1; i >= 0; i--)
{
if (pos[i] < array.GetLength(0) - len + i)
{
pos[i]++;
for (int j = i + 1; j <= len - 1; j++)
{
pos[j] = pos[i] + j - i;
}
break;
}
else
{
continue;
}
}
yield return str;
}
}
}
}
static void Main(string[] args)
{
List<int> numList = new List<int>(8); for(int i = 1; i <= 8; i++)
{
numList.Add(i);
} // 来那个层循环 取两个数所有可能性 两个数为m和n
for(int m = 0; m < numList.Count; m++)
{
for(int n = m + 1; n < numList.Count; n++)
{
int sum = 0; for(int i = 0; i < numList.Count; i++)
{
if(i != m && i != n)
{
sum += numList[i];
}
} int mNum = numList[m];
int nNum = numList[n];
int sub = 21 - mNum - nNum; if(sub * 2 == sum)
{
// 由这里可以看出 只有 1,5 2,4 两种可能
Console.WriteLine(string.Format("公共数字为{0}和{1};", numList[m], numList[n])); // 查找其他数据 还可以根据上面 用三层循环实现
List<int> tmpList = new List<int>(numList);
tmpList.Remove(mNum);
tmpList.Remove(nNum); int s = (int)Math.Pow(2, 6) / 2; for(int p = 0; p < s; p++)
{
List<int> result1 = new List<int>();
List<int> result2 = new List<int>(); int[] flags = ConvertInt(6, p); for(int q = 0; q < 6; q++)
{
if(flags[q] == 0)
{
result1.Add(tmpList[q]);
}
else if(flags[q] == 1)
{
result2.Add(tmpList[q]);
}
else
{
throw new Exception("数据处理出错");
}
} if(Sum(result1) == sub)
{
Print(result1);
Print(result2);
Console.WriteLine();
}
}
}
}
} Console.ReadLine();
} static int[] ConvertInt(int num, int i)
{
int[] flags = new int[num]; while(i != 0)
{
flags[--num] = i % 2;
i = i / 2;
} return flags;
} static int Sum(List<int> items)
{
int sum = 0; for(int i = 0; i < items.Count; i++)
{
sum += items[i];
} return sum;
} static void Print(List<int> results)
{
string s = string.Empty; for(int j = 0; j < results.Count; j++)
{
if(results[j] != 0)
{
s += results[j] + ",";
}
} Console.WriteLine("{{{0}}}", s.Trim(','));
}
{
for (int d = 1; d <= 8; d++)
{
if ((36 + i + d) == 42)
{
if(i!=d)
{
MessageBox.Show(i.ToString() + "---" + d.ToString());
}
}
}
}