已知5位整数,要求取出其它3位相加[color=#FF0000]等于0或等于10或等于20[/color]
比如这5位数分别是:1,2,3,4,5
那么要显示成:1,4,5|2,3 <----(1+4+5=10,剩余的2位数放到后面)
-------------------------------------------
比如:3,3,5,8,9
要显示成:3,8,9|3,5 <-----(3+8+9=20,剩余的2位数放到后面)
-------------------------------------------
比如:0,0,0,5,6
要显示成:0,0,0|5,6 <----(0+0+0=0,剩余的2位数放到后面)
===========================================================
有时候可能会有几个组合,比如 1,2,3,4,5 , 2+3+5也等于10,但我只要显示一组即可
如果没有组合成功的就显示成无,比如 1,1,2,4,9 ,这个就要显示成(无)
------解决方案--------------------
a[0]+a[1]+a[2]
a[0]+a[1]+a[3]
a[0]+a[1]+a[4]
a[1]+a[2]+a[3]
a[1]+a[2]+a[4]
a[2]+a[3]+a[4]
就判断下这六组结果任意一个是不是0/10/20就行啦
------解决方案--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static IEnumerable<IEnumerable<int>> SelectThreeInFive(int[] nums)
{
IEnumerable<int> f = Enumerable.Range(0, 5);
IEnumerable<IEnumerable<int>> idx = f.Select(x => new int[] { x });
for (int i = 1; i < 3; i++)
idx = idx.SelectMany(x => f.Where(y => !x.Contains(y)).Select(y => x.Concat(new int[] { y })));
return idx.Select(x => x.Select(y => nums[y]).Concat(f.Except(x).Select(y => nums[y])));
}
static void Main(string[] args)
{
int n = 12345;
int[] data = n.ToString().PadLeft(5, '0').Select(x => x - '0').ToArray();
var query = SelectThreeInFive(data).FirstOrDefault(x => x.Take(3).Sum() == 0
------解决方案--------------------
x.Take(3).Sum() == 10
------解决方案--------------------
x.Take(3).Sum() == 20);
if (query != null)
Console.WriteLine("{0}
------解决方案--------------------
{1}", string.Join(", ", query.Take(3)), string.Join(", ", query.Skip(3)));
else
Console.WriteLine("(无)");
}
}
}
1, 4, 5
------解决方案--------------------
2, 3
Press any key to continue . . .
------解决方案--------------------
循环计算,把5个数据写到数组中,循环计算,如楼上的rayel2与rd16的方法,代码简单易解。caozhy的代码牛,学习!