• 生成若干个随机数等于某个指定的和


      背景是来自博问,就趁手写了写代码,是实话有点紧张了,毕竟是有人看的,急于回复,言语有些不严谨,图还画错了一个地方,程序的初始值是0,人为习惯写成了1,反反复复回复了一遍,被反对了一下,原本是支持的....

      所以对自己刚刚的表现不是很满意,于是又优化了一下重新回答了那个人,并得到了青睐,算我自作多情吧,也许别人只是借鉴了下思路,废话不多说,上code!

            static void Main(string[] args)
            {
                List<int> resultList = new List<int>();
                int curr = 100;
                Random ir = new Random();
                int index = ir.Next(1,10);
                List<int> list = new List<int>();
                for (int i = 0; i < index; i++)
                {
                    Random r = new Random();
                    int v = r.Next(100);
                    do
                    { 
                        v = r.Next(100);
                    } while (list.Contains(v));
                    list.Add(v);
                }
                list.Sort();
                Console.WriteLine(curr-list[list.Count-1]);
                for (int i = list.Count-1; i >=1; i--)
                { 
                    Console.WriteLine(list[i] - list[i-1]);
                } 
                Console.WriteLine(list[0]-0);
            }

      

    resultList是结果集合,为了输出具体数字就没多事存集合了,真正用到的时候会存到集合里
    int index = ir.Next(1,10);//毕竟个数不能写死,这样就不好玩了,回答别人博问的最后答案没有这个,是写死的,不过她应该自己能改过来吧,我对自己不满意也就没脸继续去回复了~
    do
    { 
        v = r.Next(100);
    } while (list.Contains(v));//随机会存在重复的问题,因此做个do-while处理一下,呵呵,记得今年在某个地方写代码这里还出现过死循环,这样一说这里还是有死循环漏洞的,应该加个循环次数限制,万一真的达到某个条件就一直循环呢,那就尴尬大了
    list.Sort();//线段之间的点是需要按顺序来的,可惜不能倒叙,不然下面的for也不必i--了,说实话i--反着来还是第一次,挺不习惯
    Console.WriteLine(curr-list[list.Count-1]);
    for (int i = list.Count-1; i >=1; i--)
    { 
        Console.WriteLine(list[i] - list[i-1]);
    } 
    Console.WriteLine(list[0]-0);//输出头尾的代码看着很不雅观,没办法, 要想在一个for里输出估计又要加逻辑,何必呢,简单来,不雅观的地方封装成方法折叠嘛。

    --------------------------------------------------------------

    上面是图,下面是博问截取的内容,错误的地方修饰了一下

    --------------------------------------------------------------

    设数字为N,和的范围为1-N。

    1-N之间是若干节点(位置),假设为a,b,c。

    线的长度是N,N的长度=各个线段的和

    也就是N=(n-c)+(c-b)+(b-a)+(a-0);

    SO,可以得出n-c、c-b、b-a、a-0就是你要的数。

    同理,可以根据自己的需要改成a...n-1个节点

    --------------------------------------------------------------

      怎么说呢,算是一次经验和教训吧,希望自己以后再回答别人问题时不要急于求成,写好了Demo再给人家,减少别人的问题,当然授人以鱼不如授人以渔,思路也很重要,给思路是给别人的,给源码其实除了方便别人,也是对自己的锻炼吧,有些东西只是想一想不写出来,和亲自去实践一下,还是有很大区别的。

      就不发首页了,指不定被踢下来,不过说实话这种经历还是想让更多人看到的,毕竟有问题也能一起交流交流,算了,家丑不外扬,自己知道就好,嗯,挺好的,就这样!

    续:输出的值之间差不能太大,所以重新写了

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

            static void Main(string[] args)
            {
                Random random = new Random();
                var intList = new List<int>();
                int mutil = 100;
                int du = 10;
                do
                {
                    int index = random.Next(1, du);
                    if (index > 0)
                    {
                        intList.Add(index);
                    }
                } while (!(intList.Sum() >= mutil - du));
                intList.Add(mutil - intList.Sum());
                foreach (var item in intList)
                {
                    Console.WriteLine(item);
                }
                Console.WriteLine("集合值:"+intList.Sum());
            }

    每次添加10以内的值,在最后一次“可能” 添加满的时候停止循环,然后根据总数做减法得出最后一个值。

  • 相关阅读:
    Linux 安装oracle客户端
    测试杂感:Bug Bash
    常用Eclipse插件在线安装地址
    [转]Source Insight使用小技巧小结
    cygwin安装
    Jmeter常见问题
    对测试人员或开发人员来说相互沟通有多重要?
    QTP基础学习(二)启动与设置
    什么是基准测试?
    推荐几款热门的网站测试工具
  • 原文地址:https://www.cnblogs.com/sunshine-wy/p/7891613.html
Copyright © 2020-2023  润新知