当前位置: 代码迷 >> VB Dotnet >> 问个简略的小算法?小算法。
  详细解决方案

问个简略的小算法?小算法。

热度:266   发布时间:2016-04-25 02:24:13.0
问个简单的小算法???????小算法。。。
已知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的代码牛,学习!
  相关解决方案