博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生成若干个随机数等于某个指定的和
阅读量:6275 次
发布时间:2019-06-22

本文共 3100 字,大约阅读时间需要 10 分钟。

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

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

static void Main(string[] args)        {            List
resultList = new List
(); int curr = 100; Random ir = new Random(); int index = ir.Next(1,10); List
list = new List
(); 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 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以内的值,在最后一次“可能” 添加满的时候停止循环,然后根据总数做减法得出最后一个值。

 

转载地址:http://lzmpa.baihongyu.com/

你可能感兴趣的文章
js面向对象编程
查看>>
Ruby中类 模块 单例方法 总结
查看>>
jQuery的validate插件
查看>>
5-4 8 管道符 作业控制 shell变量 环境变量配置
查看>>
Enumberable
查看>>
开发者论坛一周精粹(第五十四期) 求购备案服务号1枚!
查看>>
validate表单验证及自定义方法
查看>>
知识点002-yum的配置文件
查看>>
学习 Git(使用手册)
查看>>
javascript 中出现missing ) after argument list的错误
查看>>
RSA 加密解密
查看>>
Cause: org.apache.ibatis.ognl.ExpressionSyntaxException: Malformed OGNL expression:......
查看>>
路由模式 - direct
查看>>
form表单的target属性
查看>>
mysql的常用引擎
查看>>
Linux基础(day40)
查看>>
第二个Java应用和Tomcat的管理功能
查看>>
10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync通过ssh同步
查看>>
使用Layer弹窗时遇到Layer.Close()后dom元素延迟性销毁的问题 @Gyb
查看>>
LVS DR +keepalived配置
查看>>