问题描述
- 产生和为0的一组随机数
-
编程实现:产生n个不为0的随机数使其和为0,n的值由键盘输入,不知道要如何实现求大神帮忙。
解决方案
/*产生和为0的一组随机数
这个分析一下就知道个大概:
当N=1,那么,只有0这个数值
当N=2,那么,第二个数必须是第一个数的负数(当第一个数不为0)
当N=3,那么,第3个数必须是前两数和的负数(当和不为零时)
这样就好设计了,只要前几位随机生成,但最后一个数就必须判断并取其反值(正数就取负数,负数就取正数)就可以了.*/
int N = 1, 随机数 = new Random().Next(-100, 100);
int[] 数组 = new int[N];
do
{
if (N > 1)
数组[N - 1] = new Random().Next(-100, 100);
if (N == 1 && 数组.Sum() != 0) 数组[0] = -数组.Sum();
} while (--N > 0);
Console.WriteLine(string.Join(" ", 数组));
解决方案二:
由于没说是什么语言就用C#写,自己对应原理去改为其他语言写法.
解决方案三:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
namespace 定义事件
{
class Program
{
static void Main(string[] args)
{
开始循环:
/*产生和为0的一组随机数
这个分析一下就知道个大概:
当N=1,那么,只有0这个数值
当N=2,那么,第二个数必须是第一个数的反值(当第一个数不为0)
当N=3,那么,第3个数必须是前两数和的反值(当和不为0时)
这样就好设计了,只要前几位随机生成,但最后一个数就必须判断并取其反值(正数就取负数,负数就取正数)就可以了.*/
int N = 8;
int[] 数组 = new int[N];
do
{
if (N > 1)
数组[N - 1] = new Random(DateTime.Now.Millisecond + N).Next(-100, 100);
if (N == 1 && 数组.Sum() != 0)
数组[0] = -数组.Sum();
} while (--N > 0);
Console.WriteLine("数组内容{0},数组和{1}", string.Join(" ", 数组), 数组.Sum());
Console.ReadKey();
goto 开始循环;
}
}
}
解决方案四:
最简单的思路,产生n个随机数,得到和为s
那么每个数都减去s/n,那么这些数就是和为0的随机数。
要详细代码,请先采纳。