0-9个数放在三个盒子里的算法?

demper 2009-11-26 09:28:06
就是把0—9这10个数字放到三个盒子里,1号盒,2号盒,3号盒。1号盒放4个数,2号盒放3个数,3号盒放3个数,列出所有的结果。
...全文
211 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
demper 2009-11-27
  • 打赏
  • 举报
回复
to:ctwei86
你的方法不错,结果没问题,谢了,呵呵。。。
yuanzhe18 2009-11-27
  • 打赏
  • 举报
回复
对0-9做一个全排列即可。。。
lsy_zhu 2009-11-27
  • 打赏
  • 举报
回复
请问2号盒,3号盒作为不同的盒子区别吗?

例如2号盒装1,2,3 3号盒装4,5,6

与3号盒装1,2,3 2号盒装4,5,6是作为相同的情况还是不同的情况?
ctwei86 2009-11-27
  • 打赏
  • 举报
回复
一个超级笨的方法,但是实现的效果应该是你要的。一共是4200种。

public static List<string> GetAll()
{
List<string> all = new List<string>();
List<int> nums = new List<int>();
nums.AddRange(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
for (int i = 0; i <= 6; i++)
{
for (int ii = i + 1; ii <= 7; ii++)
{
for (int iii = ii + 1; iii <= 8; iii++)
{
for (int iiii = iii + 1; iiii <= 9; iiii++)
{
string s1 = "" + i + ii + iii + iiii;
nums.Remove(i);
nums.Remove(ii);
nums.Remove(iii);
nums.Remove(iiii);
for (int j = 0; j <= 3; j++)
{
for (int jj = j + 1; jj <= 4; jj++)
{
for (int jjj = jj + 1; jjj <= 5; jjj++)
{
string s2 = s1 + "," + nums[j] + nums[jj] + nums[jjj];
int num5 = nums[j];
int num6 = nums[jj];
int num7 = nums[jjj];
nums.Remove(num5);
nums.Remove(num6);
nums.Remove(num7);
string s3 = s2 + "," + nums[0] + nums[1] + nums[2];
//Console.WriteLine(s3);
all.Add(s3);
nums.Insert(j, num5);
nums.Insert(jj, num6);
nums.Insert(jjj, num7);
}
}
}
nums.Insert(i, i);
nums.Insert(ii, ii);
nums.Insert(iii, iii);
nums.Insert(iiii, iiii);
}
}
}
}
return all;
}

希望这个超级笨的方法对楼主有用。
liherun 2009-11-27
  • 打赏
  • 举报
回复
如果问的是有多少种放法的话C(10,4)* C(6,3)*p(3,3)
liherun 2009-11-27
  • 打赏
  • 举报
回复
C(10,4)* C(6,3)*p(3,3)
demper 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lsy_zhu 的回复:]
请问2号盒,3号盒作为不同的盒子区别吗?

例如2号盒装1,2,3    3号盒装4,5,6

与3号盒装1,2,3    2号盒装4,5,6是作为相同的情况还是不同的情况?

[/Quote]
2号盒,3号盒作为不同的盒子区别,结果应该是C(10,4)* C(6,3)这种情况的。
nixiang12 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lsy_zhu 的回复:]
请问2号盒,3号盒作为不同的盒子区别吗?

例如2号盒装1,2,3    3号盒装4,5,6

与3号盒装1,2,3    2号盒装4,5,6是作为相同的情况还是不同的情况?

[/Quote]
这个问题很重要
liherun 2009-11-27
  • 打赏
  • 举报
回复
不是,谢谢
yangxxxxxx66 2009-11-27
  • 打赏
  • 举报
回复
我认为应该是A(10,10),即10的阶乘即可,大家仔细想想是不是这样
liherun 2009-11-27
  • 打赏
  • 举报
回复
private void button3_Click(object sender, EventArgs e)
{
MessageBox.Show((suanjiecheng(10, 4) * suanjiecheng(6, 3)).ToString());
}
private int suanjiecheng(int i,int j)
{
int fenmu = 1;
int fenzi = 1;
for (int m = 1; m <= j; m++)
{
fenmu *= i--;
fenzi *= m;
}
return fenmu / fenzi;
}
huqinglu123 2009-11-26
  • 打赏
  • 举报
回复
排列组合问题...
fengling2001 2009-11-26
  • 打赏
  • 举报
回复
C(10,4)C(6,3)
具体生成,你搜下论坛,之前有生成排列组合
http://topic.csdn.net/t/20011119/11/377422.html

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧