急急急急急急急急急,在线等

liqiangsllq 2019-01-28 06:52:29
求各位大哥大姐帮个忙,写个算法,拜托了 ,只有20分
比如我输入10个数字为一组,现在我只需要显示6个或7个数字一组,一共可以分多少组,每组数字不能重复
如 11,12,13,14,16,16,17,18,19,20 输入了这10个数字

分成 11,12,13,14,15,16
11,12,13,14,15,17
11,13,14,15,16,17
11,14,15,16,17,18
12,13,14,15,16,17
11,13,14,15,16,17,18
11,14,15,16,17,18,19
12,13,14,15,16,17,18。。。。。
就这样分法,一直分到不能分为止

...全文
1668 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
然后再筛选错误结果 --> 然后再筛除错误结果 简单的迭代、递归概念,可以看出一个人是否掌握了算法、结构。
  • 打赏
  • 举报
回复
例如我们说"左递归优先搜索树"算法,有的人也会说"用for循环遍历树的每一个子节点"。那么算法最主要地并不是什么for语句,而是递归逻辑。这个递归逻辑可能在最后实现时被优化为迭代,c#(以及 vb.net)编译器本身也支持迭代器功能来自动进行这类工作,而“人”的能力就体现在递归逻辑的设计上,而不是什么一大堆入门时的编程语句上。 就好像所有人都会说“任何查询,都可以说是先枚举所有可能组合,然后筛选掉错误结果,就查到了正确结果!”,这在某些人看来似乎是多么高大上的公理似地,但是在学过算法或者数据结构的人看来则应该就是最低级的标题党了。因为实用的算法正是要从最低级的标题党出发,将这个“刷选”动做推入算法深入内部,从而延迟开始、提前筛选、及时地输出结果,而根本不是什么“先把所有组合列出来然后再筛选错误结果”这种不靠谱的看似公理的算法。 这就好像说“把一只狗放到电脑面前足够长时间,它也能给我们写出一本《红楼梦》”一样,其实说“先列出所有可能组合然后再筛选结果”,说“这就是一堆 for 循环进行迭代组合”等等说法,其实都是标题党。 是非并不是学习的真正目标,因为纠结是非的人往往并不懂该如何做。我们的目地是搞懂如何做,而不是仅仅纠结是非。
b10868 2019-02-10
  • 打赏
  • 举报
回复
可以这样:比如10个数取6个数。写6个嵌套for循环把10个数放入arr数组,for(var i=0;i<arr.lengh;i++){ for(var j=0;j<arr.lengh;j++){ if(j!=i)for(var k=0;k<arr.lengh;k++){.....if(n!=i&&n!=j&&n!=k&&n!=l&&n!=m)console.log(arr[i]+","+arr[j]+","+arr[k]+","+arr[l]+","+arr[m]+","+arr[n]);临时想的思路,代码复杂点但思路清楚。
嘟啦咪嗖 2019-02-10
  • 打赏
  • 举报
回复
可以用数学的思想想一下,总共有十个数,只有六个篮子,且六个篮子中的数都不同,那么第一个篮子可以有十种选择,第二个篮子有九种选择,以此类推,一共可以分为10x9x8x7x6x5组,接下来,思考怎么用编程写下来吧,希望可以给你提供一下思路。
程序员的键盘 2019-02-09
  • 打赏
  • 举报
回复
666
  • 打赏
  • 举报
回复
学过算法或者数据结构课程的人知道,算法的伪代码其实非常简洁。所以从算法问题,其实很容易一眼看出是不是标题党、有没有编程结果。
  • 打赏
  • 举报
回复
引用 28 楼 射手座cl 的回复:
用for循环计算,多个分组直接把方法累加。
有时候,写出来还不如不写。一旦写出来别人就知道你写不出来。
射手座cl 2019-02-01
  • 打赏
  • 举报
回复
求最后分了多少组:10*9*8*7*6*5*4+10*9*8*7*6*5=756000
设 n为数字个数,m为每组数字个数 结果为: A+= n*n-1....*n-m
代码实现:写个方法mn作为参数用for循环计算,多个分组直接把方法累加。
全部显示出来调全排列的方法
Lpd_Reason 2019-02-01
  • 打赏
  • 举报
回复
这也太简单了吧,先把数组去重,按照排列组合公式写出,再适当进行时间复杂度的优化。
  • 打赏
  • 举报
回复
引用 4 楼 Banianer 的回复:
这不是排列组合么
问题是如果知道“排列”却不知道怎么写代码,应该总结一下缺失了什么知识。
  • 打赏
  • 举报
回复
引用 2 楼 liqiangsllq 的回复:
我不懂啊,只是想实现这个功能,能帮个忙吗,是单位要用,我只懂一点点皮毛,拜托了大神
单位出点钱。
  • 打赏
  • 举报
回复
从 c# 的角度说,问题可能就是不懂 .net 的迭代器模式编程。从数据结构/算法基础角度来说,那么可能就是没学会几乎涵盖算法知识的递归概念。但是假设脱离开软件编程课程,那么就是数学归纳法、集合论没有学好。
  • 打赏
  • 举报
回复
给你写一下代码:
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var cnt = 0;
            foreach (var r in 排列(new List<int> { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }, 7))
            {
                Console.Write("第{0}个排列:\t", ++cnt);
                foreach (var p in r)
                    Console.Write("{0} ", p);
                Console.WriteLine();
            }
            Console.WriteLine(".......按任意键退出");
            Console.ReadKey();
        }

        private static IEnumerable<List<int>> 排列(List<int> array, int len)
        {
            return 排列(array, len, array.Count);
        }

        private static IEnumerable<List<int>> 排列(List<int> array, int len, int count)
        {
            if (count >= len)
            {
                if (len < 1)
                    yield return new List<int>();
                else
                {
                    foreach (var r in 排列(array, len, count - 1))
                        yield return r;
                    foreach (var r in 排列(array, len - 1, count - 1))
                    {
                        var t = r.ToList();
                        t.Add(array[count - 1]);
                        yield return t;
                    }
                }
            }
        }
    }
}
不过写代码其实没啥意思,重点是要有递归、迭代的算法基础,没基础就没有未来。
胖纸不争 2019-01-31
  • 打赏
  • 举报
回复
全排列算法知道吗? 就是假设10个数字存到数组里,那么讲数组的下标作为标识,进行七位数的全排列,然后得到结果....
it_boy88 2019-01-31
  • 打赏
  • 举报
回复
为什么可以20分发帖?我要50分
  • 打赏
  • 举报
回复
引用 21 楼 汤奕铄 的回复:
用C++的for循环可以呀!
算法上来说,你并不知道要写几层 for 循环。 所以还是写出来然后实际执行测试,而不要仅仅看表面名词儿。
  • 打赏
  • 举报
回复
例如我们要排除掉在集合 ex 中的数字,并且只要前3个结果,就可以写
        static void Main(string[] args)
        {
            var cnt = 0;
            var ex = new List<int> { 15 };
            var q = from x in 排列(new List<int> { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }, 7)
                    where !(from z in x where ex.Contains(z) select z).Any()
                    select x;
            foreach (var r in q.Take(3))
            {
                Console.Write("第{0}个排列:\t", ++cnt);
                foreach (var p in r)
                    Console.Write("{0} ", p);
                Console.WriteLine();
            }
            Console.WriteLine(".......按任意键退出");
            Console.ReadKey();
        }
这并不是在什么“先计算出来整个排列结果,然后再排除一些结果”,而是在“逐行”进行过滤,因为 Linq 是延迟执行的,它会迭代并且优化空间和时间。 实际上这里可以看出很多 .net 编程模式,不是原始的简单的什么 c++ 简单函数可以比拟的。
汤奕铄 2019-01-31
  • 打赏
  • 举报
回复
用C++的for循环可以呀!
汤奕铄 2019-01-31
  • 打赏
  • 举报
回复
你按照算法(或者数据结构)教科书上的格式,把递归算法写出来呗。先不要写c#代码,先写算法。
keen1979 2019-01-31
  • 打赏
  • 举报
回复
这个感觉像买彩票中奖,可以先用数组存好,然后随机取6个,记下6个的顺序,比如 987213,然后把这个顺序当做一个数字再重新排序好,变成123789,如果下次再抽,出现同样的数字,就抛弃掉,重新来就可以了
加载更多回复(10)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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