1248
1257
1347
2346 {:3_41:}{:3_41:}{:3_41:} 本帖最后由 guoshaoming 于 2010-10-25 00:08 编辑
回复 maybe_madio 的帖子
分配方案如下:
6 4 3 2
6 5 3 1
7 4 3 1
7 5 2 1
8 4 2 1
9 3 2 1
其代码如下:
#include < iostream >
using namespace std;
int main()
{
int x1,x2,x3,x4;
int t=0;
for(x1=1;x1<15;x1++)
for(x2=1;x2<15;x2++)
for(x3=1;x3<15;x3++)
for(x4=1;x4<15;x4++)
{
if((x1+x2+x3+x4==15)&&(x1>x2)&&(x2>x3)&&(x3>x4))
cout<<x1<<"\t"<<x2<<"\t"<<x3<<"\t"<<x4<<endl;
}
return 0;
}
回复 guoshaoming 的帖子
虽然对于15来说,比较容易算出, 那如果我的变量再增多呢? 假设有x1+x2+..xm=n呢?(m<n)
能否有更好的程序算法来解决这个问题呢? 你的穷举算法也只能适用于少量的变量和n较小的特例,当变量增多,或是n变大,这是阶乘级的时间复杂度哦!
回复 maybe_madio 的帖子
本身这个算法就很具有一般性,如果你增加变量,只要对程序稍加改动就可以了,
for(xm=1;xm<n;xm++)
然后判断语句和输出也做相应改变
回复 maybe_madio 的帖子
当你的变量大到一定程度的时候,你可以将约束条件写成一个循环语句,判断、输出也可以写成相应的循环语句!
反正程序的总体思路就是上面那个,过多的我就不多说了
要是好多好多球好多好多盒子可怎么办呢…………这真是一个问题呀………………不过一时想不出来其他算法了……应该穷举能做呀…………应该用不了几个小时吧………… 13种呀。。。。。。。。。。。。。。。。 13种。。。。。。。。。。。。。 可以先把15个球排成一排,然后从他们之间的14个间隔里插入3块板,就可以把15个小球分成4份了,用这个思想,可以很容易解决你的问题,隔板法是很经典的东西。
页:
1
[2]