在0~N个数字中,取指定个数的不重复数字,要求这些数字的和为指定值,求所有结果
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp1 {
class Program {
static void Main(string[] args) {
// 防止出现随机值无法组合
) {
Con = ;
// 初始化数组长度
;
Arr = new int[Len];
Temp = new int[Con];
// 最小的数
) * Con / ;
// 最大的数
+ Len) * Con / ;
// 获取范围内的一个随机数
Random random = new Random();
Sum = random.Next(Min, Max + );
//
GetConNum(, );
}
Console.WriteLine(Sum);
Console.WriteLine(ResDic.Count);
//for (int i = 0; i < ResDic.Count; i++) {
// Console.WriteLine(ResDic[i]);
//}
Console.ReadLine();
}
/// <summary>
/// 用于存储所有结果
/// </summary>
private static Dictionary<int, string> ResDic = new Dictionary<int, string>();
/// <summary>
/// 用于取值
/// </summary>
private static int[] Arr;
/// <summary>
/// 用于存值
/// </summary>
private static int[] Temp;
/// <summary>
/// 要取的数字个数
/// </summary>
private static int Con;
/// <summary>
/// 总和
/// </summary>
private static int Sum;
/// <summary>
/// 在Arr中取Con个不重复的数字
/// </summary>
/// <param name="index"></param>
/// <param name="init"></param>
private static void GetConNum(int index, int init) {
if (index >= Con) {
// 计算这些数字的和
;
; i < Temp.Length; i++)
Tsum += Temp[i];
// 若和与Sum相同,全排列存入所有排列可能
if (Tsum == Sum)
ListArray();
return;
}
for (int i = init; i < Arr.Length; i++) {
Temp[index] = i;
GetConNum(index + , i + );
}
}
/// <summary>
/// 对数组Temp进行全排列
/// </summary>
/// <param name="index"></param>
private static void ListArray(int index) {
// 一次排列结束后
if (index >= Temp.Length) {
// 取出当前的排列结果,拼成字符串
string str = "";
; i < Temp.Length; i++) {
str += Temp[i];
)
str += ",";
}
// 将结果存入字典
ResDic.Add(ResDic.Count, str);
return;
}
int t = Temp[index];
// 交换位置
for (int i = index; i < Temp.Length; i++) {
Temp[index] = Temp[i];
Temp[i] = t;
ListArray(index + );
// 还原
Temp[i] = Temp[index];
Temp[index] = t;
}
}
}
}
在0~N个数字中,取指定个数的不重复数字,要求这些数字的和为指定值,求所有结果的更多相关文章
- 找出n个自然数(1,2,3,……,n)中取r个数的组合
<?php /** * 对于$n和$r比较小, 可以用这种方法(当n=5, r=3时) */ function permutation1($n, $r) { for($i=1; $i<=$ ...
- IGeometry 中取指定的点
private static IGeometryCollection MakeMultiPoint(IGeometry geometry,int pointcount) { IGeo ...
- js指定范围指定个数的不重复随机数
今天偶然看到的 比如要生成 1-100范围之内的10个不重复随机数,代码就可以这么写 var arr = []; for (var i = 1; i <=100; i++) { arr.push ...
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3
// test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- 从list中取N个随机生成一个集合
在工作中发现有很多有序算法,较少见到一些可用的无序随机算法.无序随机算法的目的是让客户感觉每次都不一样,因为一直看一样的会审美疲劳哈. 在jdk自带一种CollectionUtils.shuffle& ...
- 使用回溯法求所有从n个元素中取m个元素的组合
不多说了,直接上代码,代码中有注释,应该不难看懂. #include <stdlib.h> #include <stdio.h> typedef char ELE_TYPE; ...
- SQL Server 从一组数字中随机获取一个数
很多人在开发需求中想获取一个随机数,或者从一组数字中获取一个数, 这个需求很简单,而且有很多方式可以实现,下面就介绍几种常见的方式,以作为笔记或供有需要的人参考. 比如有一组数字: 57 59 63 ...
- Lua在给定范围内,生成指定个数不重复随机数组
本篇主要是参考 lua连续随机数 这篇文章完成.大家可以去原贴查看学习. 生成随机数组,暂时发现两种方法 1.把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都 ...
- mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?
原文地址: http://www.cnblogs.com/stringzero/p/5707467.html 原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int ...
随机推荐
- 《Java从入门到放弃》JavaSE入门篇:面向对象概念(入门版)
要知道什么是面向对象,你首先要有个对象吧,所以······没有对象的可以回家洗洗睡了· 好吧,前面是开玩笑,要说明什么是面向对象,我们还是先 例子: 小呆:"小傻,你今天早餐吃的什么?&qu ...
- Maven详解(七)------ 创建Web工程以及插件原理
1.什么是 Maven 插件? 上一篇博客我们将了 Maven 的生命周期,我们知道 Maven 的核心是生命周期,生命周期指定了 Maven 命令执行的流程顺序.但是真正实现流程的工程是由插件来完成 ...
- Linux程序写入oralce数据库中文显示为问号??? 代码实现设置环境变量!
Linux程序写入oralce数据库中文显示为问号??? 1.问题介绍 根本原因是字符集的问题,是数据库的字符集和写入程序的linux系统的字符集不一致导致: 但是用export NLS_LANG=& ...
- python的计数引用分析(一)
python的垃圾回收采用的是引用计数机制为主和分代回收机制为辅的结合机制,当对象的引用计数变为0时,对象将被销毁,除了解释器默认创建的对象外.(默认对象的引用计数永远不会变成0) 所有的计数引用+1 ...
- Cognos报表调度与作业管理
本文针对Cognos的报表调度和作业管理做案例分析.为了测试报表定时调度功能,本文将报表定时输出到指定的归档目录. 1. 测试环境 Cognos V11.0 2. 设置档案文件根目录 Cognos报 ...
- 纯css实现table表格固定列和表头,中间横向滚动的思路-附案例
最近做的后台管理系统要处理大量的表格 原项目是采用的for循环加拼接字符串的方式实现;导致js代码一大堆;各种单引号和双引号的嵌套;让人头疼;遂引入vue.js;用v-for做模板渲染;工作量顿时减轻 ...
- 插入排序与希尔排序Java实现
public class TestMain { public static void main(String[] args) { Integer[] a = new Integer[5000]; fo ...
- chrome开发工具指南(二)
Application 面板 使用 App Manifest 窗格检查您的网络应用清单和触发 Add to Homescreen 事件. 使用 Service Worker 窗格执行与服务工作线程相关 ...
- startsWith和endWith方法
startsWith(): 例如:if(a.startsWith(b)) //判断字符串a 是不是以字符串b开头. 语法1 public boolean startsWith(String prefi ...
- ln命令详解
ln命令 (全称:link) ln命令用来为文件创建一个连接,类似于Windows的快捷方式,连接类型分为硬连接和软连接(符号连接)两种,默认的连接类型是硬连接.如果要创建符号连接必须使用" ...