asp.net随机生成50个(1-9)的数,总和等于200,求高手!!
7个回答
展开全部
// 分析:
// 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();
}
}
// 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();
}
}
展开全部
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都没装,不方便试。就算局部数值不太准确,思路肯定是没什么问题的。
额,楼上比我快,悲剧。
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都没装,不方便试。就算局部数值不太准确,思路肯定是没什么问题的。
额,楼上比我快,悲剧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是所有的组合?还是就一个组合就行?
追问
是随机的数,肯定有多个组合了啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
}
}
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
{
}
}
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个数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在最前面加 using System.Drawing,或者直接在Graphics前面加
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询