编程-产生和为0的一组随机数

问题描述

产生和为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的随机数。
要详细代码,请先采纳。

时间: 2024-09-04 08:45:05

编程-产生和为0的一组随机数的相关文章

vb-VB产生一个0~2的随机数,其中0、1、2出现的概率为1:2:3

问题描述 VB产生一个0~2的随机数,其中0.1.2出现的概率为1:2:3 VB产生一个0~2的随机数,其中0.1.2出现的概率为1:2:3 解决方案 产生一个0~5的随机数,如果是0,输出0,是1或者2,输出1,如果是3 4 5输出2. 用Int(Rnd() * 6) 解决方案二: 还是离不了Rnd来生成伪随机数 解决方案三: 最简单的方法,int sNum[6] = {0,1,1,2,2,2},然后随机下标!

编程珠玑之生成0至n-1之间的k个不同随机序列的扩展问题 --2014人人网笔试题目

  <编程珠玑>中习题1.4的题目是:"如果认真考虑了习题3,你将会面对生成小于n且没有重复的k个整数的问题.最简单的方法就是使用前k个正整数.这个极端的数据集合将不会明显的改变位图方法的运行时间,但是可能会歪曲系统排序的运行时间.如何生成位于0至n - 1之间的k个不同的随机顺序的随机整数?尽量使你的程序简短高效."  解决这个问题可以使用以空间换时间的方式,基本的思想是 利用洗牌的原理,将n个数(0至n-1)按次序排好,依次让每个数和一个随机挑选出的位子进行互换,这样肯

Flash编程基础:As3.0概要

编程 随着一些相关资料对as3.0的介绍,有人可能认为它是另一种语言.它的根本改变在哪呢,它是什么呢?现在我们要放松一点.如果你熟知as2.0,那么它的变化并不是很大,甚至增加了一些命令你可以使用.     从我们第一眼看as3.0,它并不是一个全新的语言,它的架构要好于AS2.0,你将从FLASH8开始发现这些.任何东西都有自已的类和整洁的子类.类的继承关系看起来很复杂,但是它却是很容易理解.     主要的改变:     1.不在有_global范围了,但是你可以通过在预先的public,p

vc++编程问题-vc++6.0 运行出现dedug assertion failed

问题描述 vc++6.0 运行出现dedug assertion failed File:viewform.cpp Line:69 这要怎么解决? 解决方案 这是代码中主动抛出的异常,一般来说,表示你某个参数不正确,你需要检查一下代码 比如: CHAR *p = NULL; ASSERT(p==NULL); 执行到这段就会出现你这个错误提示

网络编程-android 安卓 4.0 给一个客户端和服务器的demo。

问题描述 android 安卓 4.0 给一个客户端和服务器的demo. android 4.0以后到底是怎么联网的?求大神给一个demo.一个客户端和一个服务器的.服务器端servlet的写的吧.越详细越好.谢谢了.对那个异步消息不是很懂,还有就是子线程一块给详细点.谢谢了 解决方案 楼主,你这个问题有点大...我提供一些思路 客户端就不用说了.服务器端,按照现在的流行趋势,建议用Nodejs + MongoDB.Nodejs就类似tomcat,是给服务器端部署监听,监听客户端的请求.Mong

艾伟:.NET 4.0 中的契约式编程

契约式编程不是一门崭新的编程方法论.C/C++ 时代早已有之.Microsoft 在 .NET 4.0 中正式引入契约式编程库.博主以为契约式编程是一种相当不错的编程思想,每一个开发人员都应该掌握.它不但可以使开发人员的思维更清晰,而且对于提高程序性能很有帮助.值得一提的是,它对于并行程序设计也有莫大的益处. 我们先看一段很简单的,未使用契约式编程的代码示例. // .NET 代码示例 public class RationalNumber { private int numberator; p

.NET 4.0 中的契约式编程

契约式编程不是一门崭新的编程方法论.C/C++ 时代早已有之.Microsoft 在 .NET 4.0 中正式引入契约式编程库.博主以为契约式编程是一种相当不错的编程思想,每一个开发人员都应该掌握.它不但可以使开发人员的思维更清晰,而且对于提高程序性能很有帮助.值得一提的是,它对于并行程序设计也有莫大的益处. 我们先看一段很简单的,未使用契约式编程的代码示例. // .NET 代码示例public class RationalNumber{ private int numberator; pri

求给出一个生成n个和为1,且每个数都在[0,1]间的随机数的算法

问题描述 求给出一个生成n个和为1,且每个数都在[0,1]间的随机数的算法 同题,有伪码就好了,或者其他什么代码都可以.要求生成的随机数分布不会有明显的集中,比如最后几个随机数总是近似为零 解决方案 这不很简单吗. 理论上:先生成n个随机数,求总和得S,每个数都除以S,就保证和为1. 实现上: 1)除之前先判断一下S是否为0(随机算法太妖了吧),是0就重来. 2)考虑到小数的精度问题,最后一个数修正为 1-(前n-1个数的和). 解决方案二: 这个简单,产生n个0~1的随机数,相加,然后得到一个

Java 编程要点之并发(Concurrency)详解

本文详细介绍了 Java 并发(Concurrency)的基础用法和原理. 计算机用户想当然地认为他们的系统在一个时间可以做多件事.他们认为,他们可以工作在一个字处理器,而其他应用程序在下载文件,管理打印队列和音频流.即使是单一的应用程序通常也是被期望在一个时间来做多件事.例如,音频流应用程序必须同时读取数字音频,解压,管理播放,并更新显示.即使字处理器应该随时准备响应键盘和鼠标事件,不管多么繁忙,它总是能格式化文本或更新显示.可以做这样的事情的软件称为并发软件(concurrent softw