扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:csdn 来源:csdn 2009年12月15日
关键字: 问答
由1,2,3,4,1.1组合小于6的组合一共有多少种,什么算法可以完全遍历出来
由1,2,3,4,1.1组合小于6的组合一共有多少种,什么算法可以完全遍历出来
可以是
1 <6
1,1 <6
1,2 <6
1,2,3 <6
2,2 <6
都可以自身可以多次利用
怎么能遍历出来所有的呢
static void Main(string[] args)
{
double[] array = { 1, 2, 3, 4, 1.1 };
GetCombination(array);
}
static string GetBinaryString(int n, int length)
{
string result = string.Empty;
double mod = 0;
while (n != 0)
{
mod = n % 2;
n = n / 2;
result = mod.ToString() + result;
}
if (result.Length < length)
result = result.PadLeft(length, '0');
return result;
}
static void GetCombination(double[] nums)
{
double count = Math.Pow(2, nums.Length);
for (int i = 1; i <= count - 1; i++)
{
string str = GetBinaryString(i, nums.Length);
double sum = 0;
List<double> list = new List<double>();
for (int j = 0; j < str.Length; j++)
{
if (str[j] == '1')
{
list.Add(nums[j]);
sum += nums[j];
}
}
if (sum < 6)
{
Console.WriteLine("可能的组合有:{0} 和为:{1}", string.Join(",", Array.ConvertAll<double, string>(list.ToArray(), Convert.ToString)), sum);
}
}
for (int i = 0; i < nums.Length; i++)
{
double sum = 0;
int index = 0;
while ((sum + nums[i]) < 6)
{
sum += nums[i];
if (sum < 6)
index++;
}
Console.WriteLine("可能的组合有:{0}个{1} 和为{2}", index, nums[i], sum);
}
}
输出为:
可能的组合有:1.1 和为:1.1
可能的组合有:4 和为:4
可能的组合有:4,1.1 和为:5.1
可能的组合有:3 和为:3
可能的组合有:3,1.1 和为:4.1
可能的组合有:2 和为:2
可能的组合有:2,1.1 和为:3.1
可能的组合有:2,3 和为:5
可能的组合有:1 和为:1
可能的组合有:1,1.1 和为:2.1
可能的组合有:1,4 和为:5
可能的组合有:1,3 和为:4
可能的组合有:1,3,1.1 和为:5.1
可能的组合有:1,2 和为:3
可能的组合有:1,2,1.1 和为:4.1
可能的组合有:5个1 和为5
可能的组合有:2个2 和为4
可能的组合有:1个3 和为3
可能的组合有:1个4 和为4
可能的组合有:5个1.1 和为5.5
按我的理解(每个数都可以自身可以多次利用)
输出为:
1
1 1
1 1 1
1 1 1 1
1 1 1 1 1
1 1 1 1 1.1
1 1 1 1.1
1 1 1 1.1 1
1 1 1 1.1 1.1
1 1 1 2
1 1 1.1
1 1 1.1 1
1 1 1.1 1 1
1 1 1.1 1 1.1
1 1 1.1 1.1
1 1 1.1 1.1 1
1 1 1.1 1.1 1.1
1 1 1.1 2
1 1 2
1 1 2 1
1 1 2 1.1
1 1 3
1 1.1
1 1.1 1
1 1.1 1 1
1 1.1 1 1 1
1 1.1 1 1 1.1
1 1.1 1 1.1
1 1.1 1 1.1 1
1 1.1 1 1.1 1.1
1 1.1 1 2
1 1.1 1.1
1 1.1 1.1 1
1 1.1 1.1 1 1
1 1.1 1.1 1 1.1
1 1.1 1.1 1.1
1 1.1 1.1 1.1 1
1 1.1 1.1 1.1 1.1
1 1.1 1.1 2
1 1.1 2
1 1.1 2 1
1 1.1 2 1.1
1 1.1 3
1 2
1 2 1
1 2 1 1
1 2 1 1.1
1 2 1.1
1 2 1.1 1
1 2 1.1 1.1
1 2 2
1 3
1 3 1
1 3 1.1
1 4
1.1
1.1 1
1.1 1 1
1.1 1 1 1
1.1 1 1 1 1
1.1 1 1 1 1.1
1.1 1 1 1.1
1.1 1 1 1.1 1
1.1 1 1 1.1 1.1
1.1 1 1 2
1.1 1 1.1
1.1 1 1.1 1
1.1 1 1.1 1 1
1.1 1 1.1 1 1.1
1.1 1 1.1 1.1
1.1 1 1.1 1.1 1
1.1 1 1.1 1.1 1.1
1.1 1 1.1 2
1.1 1 2
1.1 1 2 1
1.1 1 2 1.1
1.1 1 3
1.1 1.1
1.1 1.1 1
1.1 1.1 1 1
1.1 1.1 1 1 1
1.1 1.1 1 1 1.1
1.1 1.1 1 1.1
1.1 1.1 1 1.1 1
1.1 1.1 1 1.1 1.1
1.1 1.1 1 2
1.1 1.1 1.1
1.1 1.1 1.1 1
1.1 1.1 1.1 1 1
1.1 1.1 1.1 1 1.1
1.1 1.1 1.1 1.1
1.1 1.1 1.1 1.1 1
1.1 1.1 1.1 1.1 1.1
1.1 1.1 1.1 2
1.1 1.1 2
1.1 1.1 2 1
1.1 1.1 2 1.1
1.1 1.1 3
1.1 2
1.1 2 1
1.1 2 1 1
1.1 2 1 1.1
1.1 2 1.1
1.1 2 1.1 1
1.1 2 1.1 1.1
1.1 2 2
1.1 3
1.1 3 1
1.1 3 1.1
1.1 4
2
2 1
2 1 1
2 1 1 1
2 1 1 1.1
2 1 1.1
2 1 1.1 1
2 1 1.1 1.1
2 1 2
2 1.1
2 1.1 1
2 1.1 1 1
2 1.1 1 1.1
2 1.1 1.1
2 1.1 1.1 1
2 1.1 1.1 1.1
2 1.1 2
2 2
2 2 1
2 2 1.1
2 3
3
3 1
3 1 1
3 1 1.1
3 1.1
3 1.1 1
3 1.1 1.1
3 2
4
4 1
4 1.1
#include "stdafx.h"
#include <iostream.h>
int main(int argc, char* argv[])
{
int i,j,m,n,k;
int num=0;
for(i=0;i <6;i++)
for(j=0;j <3;j++)
for(m=0;m <2;m++)
for(n=0;n <2;n++)
for(k=0;k <6;k++)
if(i+2*j+3*m+4*n+k*1.1 <6)
{
cout < <i < <" " < <j < <" " < <m < <" " < <n < <" " < <k < <endl;
num++;
}
cout < <num;
return 0;
}
输出依次为1 2 3 4 1.1 个数。 每一行就是一个组合 num是总共的组合数,方法没什么技巧,应该对了吧?
<?php
$num=array("0"=>"1","1"=>"2","2"=>"3","3"=>"4");
for($o=0;$o <ceil(6/$num[0]);$o++){
for($p=0;$p <ceil(6/$num[1]);$p++){
for($q=0;$q <ceil(6/$num[2]);$q++){
for($r=0;$r <ceil(6/$num[3]);$r++){
if(($o*$num[0]+$p*$num[1]+$q*$num[2]+$r*$num[3]) <6&&($o+$p+$q+$r)>1){
for($i=0;$i <$o;$i++) echo $num[0];
for($i=0;$i <$p;$i++) echo $num[1];
for($i=0;$i <$q;$i++) echo $num[2];
for($i=0;$i <$r;$i++) echo $num[3];
echo " <br/>";
}
}
}
}
}
?>
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者