求个随机数分配

FroDaniel 2017-07-20 03:02:50
就是通过一个分数,最大值,最小值和天数 来设置每天得多少分数。每天得的分数不能低于最小值,也不能高于最大值,然后通过每天得到分数和天数计算的话 总分和初始的分数是一样的。

比如1000个积分 最大值是300分 最小值是100分 共4天 每天得到到分数不能低于100分也不能高于300分, 然后这4天分数的总和是1000分。 怎么随机分配到每天得多少分? 求算法。
...全文
248 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
首推未来 2017-07-24
  • 打赏
  • 举报
回复
上面写的没考虑全..................补充.......................

            int [] a = new int[4]; 
  
           int  count=0;  //循环数值合

            for (int i = 0; i < 4; i++)
            { 
                int n = ran.Next(100, 300); // 100到300随机数
                
                 int j++;   //循环次数
                  
                 //如果总分减去 当前分后, 大于剩余次数乘以300 或 小于剩余次数乘以100, 则再以后次数循环中必会出现不再100到300之间的数据, 所以重新获取随机数。
                  if(  ( 1000-n )/ j> 300*(4-j)   ||   ( 1000-n )/ (4- j) < 100*(4-j)  ){
                      //如果是当前取值过大, 则重新取随机
                       if(  ( 1000-n )/ j> 300*(4-j)  ) {
                            int big=  ( 1000-n )/ j  -  300*(4-j)   //获取溢出部分
                             
                            n = ran.Next(100, 300-big); // 100到300减去溢出部分的随机数
                            
                        }
                       //如果是当前取值过小
                      if(  ( 1000-n )/ (4- j) < 100*(4-j) ){
                           int small=   ( 1000-n )/ (4- j) < 100*(4-j)  //获取不足部分
                             
                            n = ran.Next(100+small, 300); // 100加上不足部分到300的随机数
                        }
                 }
               
                if(i==3){
                     n=1000-count;
                } else{
               count+= n; }

                a[i]=n ;
            }
首推未来 2017-07-24
  • 打赏
  • 举报
回复

 
            int [] a = new int[4]; 
  
           int  count=0; 

            for (int i = 0; i < 4; i++)
            { 
                int n = ran.Next(100, 300); // 100到300随机数
               
                if( (count+n) >1000){
                     a[3]=1000-count ; 
                 }
                else{
                     a[i]=n;
                 }
                count+=n;
            }
CaRrot_Love 2017-07-21
  • 打赏
  • 举报
回复
因为要保证积分刚好分完,并且不超过最大和小于最小值所以想了个略粗糙的方法。应该有更简便的方法等大神来给建议

   //总积分
                int sum = 1000;
                //每天最小积分
                int min = 100;
                //每天最大积分
                int max = 300;
                //天数
                int day = 4;
                //求出每日平均值
                int avgDay = sum / day;
                int ranNumebr = 0;

                //保证不超过最大值不小于最小值获得其中接近的区间进行随机
                if (avgDay - min > max - avgDay)
                {
                    ranNumebr = max - avgDay;
                }
                else
                {
                    ranNumebr = avgDay - min;
                }

                Random ran = new Random();
                int indexRanNumber = 0;
                int[] arrayNumber = new int[day];
                for (int i = 0; i < day / 2; i++)
                {
                    //这个地方可以获取值后打乱或其他操作
                    indexRanNumber = ran.Next(0, ranNumebr);
                    //单数天为小于平均值的一个值
                    arrayNumber[i * 2] = avgDay - indexRanNumber;
                    //偶数天补齐前一天减少的值
                    arrayNumber[i * 2 + 1] = avgDay + indexRanNumber;

                }
                //如果天数为单数,最后一位补为平均值
                if (day % 2 == 1)
                {
                    arrayNumber[day] = avgDay;
                }

qq_37810333 2017-07-20
  • 打赏
  • 举报
回复
//sum 总数 number 随机数 数组b就是所需要的值 int sum = 1000; int number = 0; int [] b = new int[4]; for (int i = 0; i < 4; i++) { sum = sum - number; if (i == 3) { b[i] = sum; continue; } else { Random ran = new Random(); number = ran.Next(1, sum); b[i] = number; } } for (int j = 0; j < b.Length; j++) { Console.WriteLine(b[j]); } Console.ReadKey();

62,046

社区成员

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

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

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

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