社区
.NET Framework
帖子详情
给定33个数 从33个中选6个(可以重复) 加和等于150 统计有多少种排列方法 JAVA怎么编写啊?
heguodong
2009-11-23 10:59:27
给定33个数(1,2,3,4,5...33) 从33个中选6个(可以重复) 加和等于150 统计有多少种排列方法 JAVA怎么编写啊?
谁能解答一下 谢谢
原帖 http://topic.csdn.net/u/20091116/20/b8e6f325-d14f-4133-abbb-220180576f9f.html
...全文
541
2
打赏
收藏
给定33个数 从33个中选6个(可以重复) 加和等于150 统计有多少种排列方法 JAVA怎么编写啊?
给定33个数(1,2,3,4,5...33) 从33个中选6个(可以重复) 加和等于150 统计有多少种排列方法 JAVA怎么编写啊? 谁能解答一下 谢谢 原帖 http://topic.csdn.net/u/20091116/20/b8e6f325-d14f-4133-abbb-220180576f9f.html
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hejuan250229087
2009-11-24
打赏
举报
回复
楼主很厉害,学习一下
heguodong
2009-11-23
打赏
举报
回复
//我个人有一个想法,请人验证这个思路的正确性,欢迎讨论
using System;
using System.Collections.Generic;
using System.Text;
/* 直接根据排列组合的话量级很大,33的6次方的量级,在这个量级下做一个长时间计算的后台程序还可以,如果需要跟前台界面密切结合,反应就太慢了
* 所以想到了我们经常用的弹簧,用6个弹簧模拟这个问题
* 思路:每根弹簧的最大长度是33,最小长度是1,把6根弹簧串起来,总共长度保持在150,起始状态是每根弹簧长度25
*
* 然后我们可以开始往一边推弹簧,第一个推倒最大长度33后推第二个,一直重复道最后一根不能推动为止
* 记录整个过程中每根弹簧的长度,就是我们要的6个数字
* 考虑到两边是对称的,往两边推出来的长度是重复的,素以只需要往一边推
*/
//模拟单个弹簧的类
class Spring
{
int m_MinLength;
int m_MaxLength;
int m_Length;
public int Length
{
get { return m_Length; }
}
public Spring(int min, int max,int len)
{
System.Diagnostics.Debug.Assert(min > 0);
System.Diagnostics.Debug.Assert(len <= 33);
System.Diagnostics.Debug.Assert(len > 0);
System.Diagnostics.Debug.Assert(max <= 33);
System.Diagnostics.Debug.Assert(max >= min);
m_MinLength = min;
m_MaxLength = max;
m_Length = len;
}
//判断是否可以被拉长
public bool CanLength()
{
if (m_Length >= 33) return false;//超过33就不能继续拉长了
return true;
}
//拉长弹簧
public void Lengthen()
{
++m_Length;
}
//判断弹簧是否可以被压缩
public bool CanShort()
{
if (m_Length <= 1) return false;
return true;
}
//缩短弹簧
public void Shorten()
{
--m_Length;
}
}
//模拟一组弹簧串联
public class SpringConnect
{
readonly int m_FixLength;//串联起来的弹簧的固定不变得长度和
List <Spring> m_Springs;//串起来的弹簧串
/// <summary>
/// 构造函数
/// </summary>
/// <param name="totalLen">固定的总长度 </param>
/// <param name="springCount">弹簧的个数 </param>
/// <param name="springLen">弹簧的初始长度 </param>
public SpringConnect(int totalLen,int springCount,int springLen)
{
System.Diagnostics.Debug.Assert(totalLen > 0);
m_FixLength = totalLen;
m_Springs = new List <Spring>();
for (int i = 0; i < springCount; ++i)
{
Spring sp = new Spring(1, 33, springLen);
m_Springs.Add(sp);
}
}
//拉动弹簧,从一边往另一边顺序拉动弹簧
public void DragSpring()
{
//因为要保证总体长度不变,所以最后一根弹簧不能依靠自身的操作变化长度,只能由前面的弹簧改变长度
Spring curSpring;//当前正在被操作的弹簧
for (int i = 0; i < m_Springs.Count - 1; ++i)
{
curSpring = m_Springs[i];
Spring nxtSpring = m_Springs[i + 1];
while (true)
{
if (!curSpring.CanLength()) break;//如果当前弹簧不能被拉长,则继续下一个弹簧
if (!nxtSpring.CanShort()) break;//如果紧接在后面的弹簧不能被压缩,则继续下一个弹簧
curSpring.Lengthen();//拉长当前弹簧
nxtSpring.Shorten();//缩短后续弹簧
//输出当前的一组数字
for (int j = 0; j < m_Springs.Count; ++j)
{
Console.Write(m_Springs[j].Length);
Console.Write(" ");
}
Console.Write("\r\n");
}
}
}
}
namespace findnum
{
class Program
{
static void Main(string[] args)
{
SpringConnect cn = new SpringConnect(150, 6, 25);
cn.DragSpring();
}
}
}
//在VS2005环境下测试过
最终的结果如下
26 24 25 25 25 25
27 23 25 25 25 25
28 22 25 25 25 25
29 21 25 25 25 25
30 20 25 25 25 25
31 19 25 25 25 25
32 18 25 25 25 25
33 17 25 25 25 25
33 18 24 25 25 25
33 19 23 25 25 25
33 20 22 25 25 25
33 21 21 25 25 25
33 22 20 25 25 25
33 23 19 25 25 25
33 24 18 25 25 25
33 25 17 25 25 25
33 26 16 25 25 25
33 27 15 25 25 25
33 28 14 25 25 25
33 29 13 25 25 25
33 30 12 25 25 25
33 31 11 25 25 25
33 32 10 25 25 25
33 33 9 25 25 25
33 33 10 24 25 25
33 33 11 23 25 25
33 33 12 22 25 25
33 33 13 21 25 25
33 33 14 20 25 25
33 33 15 19 25 25
33 33 16 18 25 25
33 33 17 17 25 25
33 33 18 16 25 25
33 33 19 15 25 25
33 33 20 14 25 25
33 33 21 13 25 25
33 33 22 12 25 25
33 33 23 11 25 25
33 33 24 10 25 25
33 33 25 9 25 25
33 33 26 8 25 25
33 33 27 7 25 25
33 33 28 6 25 25
33 33 29 5 25 25
33 33 30 4 25 25
33 33 31 3 25 25
33 33 32 2 25 25
33 33 33 1 25 25
33 33 33 2 24 25
33 33 33 3 23 25
33 33 33 4 22 25
33 33 33 5 21 25
33 33 33 6 20 25
33 33 33 7 19 25
33 33 33 8 18 25
33 33 33 9 17 25
33 33 33 10 16 25
33 33 33 11 15 25
33 33 33 12 14 25
33 33 33 13 13 25
33 33 33 14 12 25
33 33 33 15 11 25
33 33 33 16 10 25
33 33 33 17 9 25
33 33 33 18 8 25
33 33 33 19 7 25
33 33 33 20 6 25
33 33 33 21 5 25
33 33 33 22 4 25
33 33 33 23 3 25
33 33 33 24 2 25
33 33 33 25 1 25
33 33 33 25 2 24
33 33 33 25 3 23
33 33 33 25 4 22
33 33 33 25 5 21
33 33 33 25 6 20
33 33 33 25 7 19
33 33 33 25 8 18
33 33 33 25 9 17
33 33 33 25 10 16
33 33 33 25 11 15
33 33 33 25 12 14
33 33 33 25 13 13
33 33 33 25 14 12
33 33 33 25 15 11
33 33 33 25 16 10
33 33 33 25 17 9
33 33 33 25 18 8
33 33 33 25 19 7
33 33 33 25 20 6
33 33 33 25 21 5
33 33 33 25 22 4
33 33 33 25 23 3
33 33 33 25 24 2
33 33 33 25 25 1
java
大作业,课程设计
用来完成大作业的。文档内容: 1
Java
技术体系 1.1
Java
语言 1.2
Java
平台 1.3
Java
应用领域 2
Java
语言的技术特点 2.1 1 2.2 2 2.3 3 3
Java
语言与C++的异同分析总结。 4 选用C和
java
语言时编程算法程序有什么不同,有什么优势和劣势。 5 自己编程学习的级别和状态。以及自己以后的编程学习的计划和想法。 6 下面3道题目
中选
一道,给出算法分析和程序。 1)“黄金分割数”在我们的生活中很常见,但是在不同的应用领域,要求的精度也不一样。 例如:三位小数是0.618 现在我们需要你能求出保留100位小数的黄金分割数,采用的算法为“分层计算法”: 黄金数= 1 --------------- 1+ 1 ------------- 1+ 1 ----------- 1+ 1 --------- ..... 注意,计算出的结果,如果第100位为0也需要保留。 2)已知一
个数
列: 5,2,4,3,7,6 那么,在这
个数
列中存在这样一些“连续数”,例如:5,2,4,3这个子数列排序后是连续的。同样2,4,3也是连续的,为了方便表示 我们使用下标来标识,这样,这
个数
列中存在以下“连续数”: [1,1] [1,4] [1,6] [2,2] [2,4] [3,3] [3,4] [4,4] [5,5] [5,6] [6,6] 这样,他就存在11个“连续数”。现在需要你在用户找出一
个数
组中所有的“连续数”。 要求: 1、用户输入一个整数N,表示下面数组的
个数
2、用户每输入一行作为一
个数
组 如: 用户输入: 1 5,2,4,3,7,6 程序输出: 11 3)有一
种
数我们称之为幸运数,它的特点是这样的,首先,由自然数按顺序
排列
: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 … 这样,1比较特殊, 1为第一个幸运数,那么,我们移除掉序号能被2整除的数(注意:是序号,而不是数本身,每次移除后都重新排序)就剩下: 1 3 5 7 9 11 13 15 17 19… 3为第二个幸运数,那么我们需要去掉序号能被3(下一次是除4,然后是5,每次
加
1)整除的数,5 11 17...剩下: 1 3 7 9 13 15 19… 那么7为第三个幸运数,后面的幸运数,依此类推,移除之后剩下的数字都是幸运数。 现在我们需要你求出
给定
的m和n之间的幸运数的
个数
: 例如:
给定
1 20,那么
个数
为:5(5个幸运数分别是1,3,7,13,19) 现在要求用户输入两
个数
m和n(m
个数。 例如: 用户输入: 1 20 程序输出: 5 格式:小四,1.5倍行距
Java
大作业
用来完成大作业的。文档内容: 1
Java
技术体系 1.1
Java
语言 1.2
Java
平台 1.3
Java
应用领域 2
Java
语言的技术特点 2.1 1 2.2 2 2.3 3 3
Java
语言与C++的异同分析总结。 4 选用C和
java
语言时编程算法程序有什么不同,有什么优势和劣势。 5 自己编程学习的级别和状态。以及自己以后的编程学习的计划和想法。 6 下面3道题目
中选
一道,给出算法分析和程序。 1)“黄金分割数”在我们的生活中很常见,但是在不同的应用领域,要求的精度也不一样。 例如:三位小数是0.618 现在我们需要你能求出保留100位小数的黄金分割数,采用的算法为“分层计算法”: 黄金数= 1 --------------- 1+ 1 ------------- 1+ 1 ----------- 1+ 1 --------- ..... 注意,计算出的结果,如果第100位为0也需要保留。 2)已知一
个数
列: 5,2,4,3,7,6 那么,在这
个数
列中存在这样一些“连续数”,例如:5,2,4,3这个子数列排序后是连续的。同样2,4,3也是连续的,为了方便表示 我们使用下标来标识,这样,这
个数
列中存在以下“连续数”: [1,1] [1,4] [1,6] [2,2] [2,4] [3,3] [3,4] [4,4] [5,5] [5,6] [6,6] 这样,他就存在11个“连续数”。现在需要你在用户找出一
个数
组中所有的“连续数”。 要求: 1、用户输入一个整数N,表示下面数组的
个数
2、用户每输入一行作为一
个数
组 如: 用户输入: 1 5,2,4,3,7,6 程序输出: 11 3)有一
种
数我们称之为幸运数,它的特点是这样的,首先,由自然数按顺序
排列
: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 … 这样,1比较特殊, 1为第一个幸运数,那么,我们移除掉序号能被2整除的数(注意:是序号,而不是数本身,每次移除后都重新排序)就剩下: 1 3 5 7 9 11 13 15 17 19… 3为第二个幸运数,那么我们需要去掉序号能被3(下一次是除4,然后是5,每次
加
1)整除的数,5 11 17...剩下: 1 3 7 9 13 15 19… 那么7为第三个幸运数,后面的幸运数,依此类推,移除之后剩下的数字都是幸运数。 现在我们需要你求出
给定
的m和n之间的幸运数的
个数
: 例如:
给定
1 20,那么
个数
为:5(5个幸运数分别是1,3,7,13,19) 现在要求用户输入两
个数
m和n(m
个数。 例如: 用户输入: 1 20 程序输出: 5 格式:小四,1.5倍行距
java
从m
个数
中均匀找出n
个数
_
JAVA
的算法实现--从长度为n的数组(元素互不相同)中任意选择m
个数
的所有组合...
从长度为n的数组(元素互不相同)中任意选择m
个数
的所有组合//分析及构思1.键盘输入数组的长度2.键盘输入组合的
个数
3.利用随机数获得一
个数
组4.在构建数组是要对数组中的元素进行判断,保证新生成的随机数与之前的数不同5.以数组a[]和m为参数调用
方法
zuhe(a,m)得到一个list6.遍历输出list算法:1.创建一个辅助数组tempNum和a相对应.tempNum中的值是0或1,1所在的位置就...
从n
个数
中选
出m
个数
,结果按照字典序
排列
数的组合问题,从n
个数
中选
出m
个数
,结果按照字典序
排列
数的组合问题。从1,2,…,n中取出m
个数
,将所有组合按照字典顺序列出。如n=3,m=2时,输出:12 13 23 思想:每
个数
的选择都有可能,比如选择两
个数
,假设第一个选择的是第i(i从0开始)
个数
,则剩下的就从i+1到length-1
中选
择。 实现如下: import
java
.util.LinkedHashSet;public cla
如何用
Java
实现
给定
一个长度为 N 的数列 A1,A2,⋅⋅⋅,AN。 现在小蓝想通过若干次操作将这
个数
列中每
个数
字清零。 每次操作小蓝可以选择以下两
种
之一: 选择一个大于 0 的整数,将它减...
为了用
Java
实现求解上述问题,可以先按照题目中给出的步骤,按照以下方式设计代码: 定义两个整型变量 N 和 K,分别表示数列长度和每次操作
中选
择的数字
个数
。 定义一个整型数组 A,其中 A[i] 表示数列中第 i
个数
字的值。 使用一个循环,不断执行操作,直到数列中的所有数字均为 0。 在循环内部,每次执行操作时,需要分别检查两
种
情况: 如果存在大于 0 的数字,则选择一个大于 0 的数字...
.NET Framework
17,740
社区成员
24,334
社区内容
发帖
与我相关
我的任务
.NET Framework
.NET技术 .NET Framework
复制链接
扫一扫
分享
社区描述
.NET技术 .NET Framework
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章