数组中任意5个数组合等于一个值 C#程序

长风大侠是也 2014-01-19 06:01:20
数组中任意5个数组合等于一个值 C# 语言
例如:
double[] array = new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20}.
任意5个数组合等于30的所有组合?求解????
...全文
234 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
长风大侠是也 2014-01-19
  • 打赏
  • 举报
回复
用的就是vs2003的. 有办法解决嘛?????
  • 打赏
  • 举报
回复
别说vs2003,就算你使用x86的汇编语言也能写出这个迭代器程序。但是,那是多么巨大的成本啊?! 所以对于一点不想掌握先进工具的人,也就不能掌握我们需要的开发技术。这些人可能会扎堆到一个专门为这些人开的烧钱的网站里去惺惺相惜(大家都约好了不用先进的工具和技术),那说明他们那里没有好的程序员。
  • 打赏
  • 举报
回复
嗯,10年前的开发工具,是做中学生的教学用么? 如果你是想专业搞开发,为什么不用稍微升级过的开发工具?
长风大侠是也 2014-01-19
  • 打赏
  • 举报
回复
可不可以用其它的泛型代替IEnumerable<IEnumerable<int>.
长风大侠是也 2014-01-19
  • 打赏
  • 举报
回复
IEnumerable<IEnumerable<int> 在vs2003里面不支持这种写法?
  • 打赏
  • 举报
回复
很简单的程序!所谓算法,也就是这个DoIt种表示的,多么简单啊! 当然,如果没有算法基础而实在是不理解“递归”的人,可能就非常费劲。否则还是很容易看懂的,代码成为自明。 还有一些人看不懂,就是没有学习过c#的迭代器技术。这算是c#知识的问题。
  • 打赏
  • 举报
回复
给你写了一个console的例子: 这种东西基本就是个简单的模式,随便套用一下) 假设保持数据的前后次序,那么可以求解
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
            bool first;
            int cnt = 0;
            foreach (var x in DoIt(array, 5, 30))
            {
                Console.Write("第{0}个解:\t", ++cnt);
                first = true;
                foreach (var y in x)
                {
                    if (!first)
                        Console.Write("+");
                    else
                        first = false;
                    Console.Write(y);
                }
                Console.WriteLine("=30");
            }
            Console.WriteLine("_____________________________________总共{0}个解!", cnt);
            Console.ReadKey();
        }

        private static IEnumerable<IEnumerable<int>> DoIt(int[] array, int count, int sum)
        {
            foreach (var x in DoIt(array, array.Length - 1, count, sum))
                yield return x;
        }

        private static IEnumerable<IEnumerable<int>> DoIt(int[] array, int end, int count, int sum)
        {
            if (end < 0)
                yield break;

            if (count == 1)
                for (var i = 0; i <= end; i++)
                    if (array[i] == sum)
                        yield return new int[] { array[i] };

            foreach (var x in DoIt(array, end - 1, count, sum))
                yield return x;

            foreach (var x in DoIt(array, end - 1, count - 1, sum - array[end]))
                yield return x.Concat(new int[] { array[end] });
        }

    }
}
  • 打赏
  • 举报
回复
什么是好的?什么是不好的?
长风大侠是也 2014-01-19
  • 打赏
  • 举报
回复
不是.有好的解决办法没?
  • 打赏
  • 举报
回复
课堂练习吗?如果是,这确实比较高级的练习。但是学生还是自己做出来才有成就感嘛。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧