高分跪求编程高手帮我解决下啊泪谢!!

来源:百度知道 编辑:UC知道 时间:2024/06/14 11:39:15
是这样的 我想要做组合,比如30个数字,我要他们5个一组的组合,但只允许最多相同1个数字.请问我该怎么弄呢
同理,让他们8个一组,但只允许最多相同2个数字; 让他们12个一组,但最多允许相同3个数字.
然后5个一组的 和8个一组的 还有12个一组的他们放在一起,但必须满足:8个一组的只能包含5个一组的2个数字... 12个一组的和其他2组的最多只能包含5个1组和8个1组的3个数字...
举个例子:比如5个一组的数字组合有 1 2 3 4 5, 2 6 7 8 9, 他们之间最多只有相同1个数字,,,然后8个一组的数字有 1 3 6 7 10 11 12 13 ,1 5 8 9 10 14 15 16 17 ,他们之间最多只有相同2个数字如1 10,但可以包含5个1组的2个数字如1 3,,6 7, 然后12个一组的有1 2 3 6 8 9 18 19 20 21 22 23 ..3 4 5 6 7 8 14 24 25 26 27 28 他跟同类只可以相同3个如 3 6 8 ,可以包含其他组如5个1组的3个数字1 2 3, 6 8 9,,,8个一组的3个数1 3 6,,,5 8 14 ....
仅仅是数字之间的组合而已,不要求排顺序.数字可以互相不同,但如果有相同数字就要满足上面说的那些条件
看明白了吧,,,,,,,,,我手动弄太容易出错了,所以想请计算机高手帮忙弄个程序用计算机实现!! 小妹跪谢了!!
我已经白等1天了 55555555

你是要让我把从1到30之内的数字,按5个数字一组其中允许有一个数字重复的把它全列出来吗?

等等,我用pascal做给你

符合条件的数字太多了啊,这好比彩票的概率一样,下面是30个数字组成5个数一组且其中只有任意两数相同的代码,至于数字我就没贴上来了,因为太多了

共有24300000个组合

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;
var a,b,c,d,e,f:integer;
begin
f:=0;
for a:=1 to 30 do
for b:=1 to 30 do
for c:=1 to 30 do
for d:=1 to 30 do
for e:=1 to 30 do
begin
if not(a in[b,c,d]) and not(b in[a,d,c,e]) and not(c in[a,b,d,e]) and not(d in[a,b,c,e])then
writeln(inttostr(a)+'-'+inttostr(b)+'-'+inttostr(c)+'-'+inttostr(d)+'-'+inttostr(e));
f:=f+1;//f为符合条件的组合个数
end;
end.

三更半夜地 把我看晕了