asp.net随机生成50个(1-9)的数,总和等于200,求高手!!

 我来答
明桖瑶gr
2011-08-26 · TA获得超过1205个赞
知道小有建树答主
回答量:397
采纳率:100%
帮助的人:618万
展开全部
// 分析:
// 1)生成 50 个数字,总和等于 200,意味着 200 / 50 = 4 每个数字平均值为 4
// 2)每个随机数不能随意生成,否则无法保证 50 个数字的和为 200
// 3)生成第一个(或前几个)随机数字,范围在 1 - 9 内可选,随着生成个数增多,可能可选范围会变小(意味可选范围 = 1 - 小于 9 的值)。
// 4)计算当前限制的最大数值=(200 - 已生成数字的和) - (“剩余个数” - 1) * 1
// >>> 若结果大于 9 则为 9
// 5)计算当前限制的最小数值=(200 - 已生成数字的和) - (“剩余个数” - 1) * 9
// >>> 若结果小于 1 则为 1
// 6)最后一个数字(即第50个)不能随机生成,否则无法保证结果等于 200

// 以下代码已通过测试
class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
int sum = 0, count = 50, value = 200, current;

for (int index = 0; index < count; index++)
{
if (index < count - 1) // 如果不是最后一个数字,则去随机数
{
int max = (value - sum) - (count - index) * 1;
int min = (value - sum) - (count - index) * 9;

max = max > 9 ? 9 : max;
min = min < 1 ? 1 : 0;

current = rnd.Next(max - min) + min;
sum += current;
}
else // 最后一个数字不能随机生成,否则无法保证生成的总和等于 200 了
{
current = value - sum;
sum += current;
}

Console.WriteLine("当前值: {0},当前累加值: {1}", current, sum);
}

Console.ReadLine();
}
}
卡老罗
2011-08-26 · TA获得超过193个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:179万
展开全部
int count =50;//数量50

int max = 200;//和为200

int[] array = new int[count];//存储生成的随机数

int sum = 0;//初始化已生成的随机数之和
Random random = new Random();
for(int i = 0 ; i < array.Length ; i++ ,count--)
{
if(count == 1)//如果是第50个数
{
array[array.Length - 1] = max - sum;
}
else//前49个数
{
array[i] = random.Newx(1 , 9);
//1、如果总和200与当前已生成的随机数之和的差值小于剩下的未生成的随机数的数量,即使接下来随机生成的全是1,总和也会超过200;
//2、如果总和200与当前已生成的随机数之和的差值大于9*count,即使接下来随机生成的全是9,总和也达不到200。
sum += array[i];
if(max - sum < count || max - sum > count * 9)
{
//重新生成array[i]
i--;
continue;
}
}
}

循环结束之后就满足了50个随机数之合为200,都存放在array中,按需调用。
随手写的,有可能会某些单词拼写错误,楼主可以试一下。

不对,条件判断有误,我想一下 。
额...好像又没错,楼主看到了可以去实际环境中试一下,我下班了,家里电脑连VS都没装,不方便试。就算局部数值不太准确,思路肯定是没什么问题的。

额,楼上比我快,悲剧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yu636389
2011-08-26 · 超过18用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:53.8万
展开全部
是所有的组合?还是就一个组合就行?
追问
是随机的数,肯定有多个组合了啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仝著中N
2011-08-26 · 超过32用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:70.9万
展开全部
Lz 这个是控制台应用程序 你没说要什么类型的,先给这个。
static void Main(string[] args)
{
Console.Write("匹配中。。。");

for (int flag = 1; flag > 0; flag++)
{

int[] a = new int[50];
int count = 0;
Random ran = new Random();
for (int i = 0; i < 50; i++)
{

a[i] = ran.Next(1, 9);
count += a[i];
}
if (count == 200)
{
for (int i = 0; i < 50; i++)
{
Console.Write(a[i] + "、");

}
Console.Write("和为" + count);
flag = -10;

}

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-08-26
展开全部
Random rnd = new Random();
int n = 0;
int sum = 0;
int[] arr = new int[51];
for (int i = 0; i < 50; i++)
{
n = rnd.Next(1, 9);
arr[i] = n;
sum += arr[i];
if (sum == 200)
{
/*你的代码*/
}
else
{
}
}
追问
这样子不行吧,肯定不能确定为50个数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
010uvbu506
2011-08-27 · TA获得超过296个赞
知道答主
回答量:552
采纳率:0%
帮助的人:390万
展开全部
在最前面加 using System.Drawing,或者直接在Graphics前面加
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式