代码如下:
3个循环嵌套:
for(int a=0; a<=200;a++)
{
for(int b=0; a<=200; b++)
{
for(int c=0; c<=200; c++)
{
row[0]=a;
row[1]=b;
row[2]=c;
//do something
}
}
}4个循环嵌套:
for(int a=0; a<=200;a++)
{
for(int b=0; a<=200; b++)
{
for(int c=0; c<=200; c++)
{
for(int d=0; d<=200; d++)
{
row[0]=a;
row[1]=b;
row[2]=c;
row[3]=d;
//do something
}
}
}
}由于在运行时并非一定是3个循环的嵌套,可能是20个甚至200个,所以代码不可能像这样写,可能要用递归的方式表达,请问递归如何写?
3个循环嵌套:
for(int a=0; a<=200;a++)
{
for(int b=0; a<=200; b++)
{
for(int c=0; c<=200; c++)
{
row[0]=a;
row[1]=b;
row[2]=c;
//do something
}
}
}4个循环嵌套:
for(int a=0; a<=200;a++)
{
for(int b=0; a<=200; b++)
{
for(int c=0; c<=200; c++)
{
for(int d=0; d<=200; d++)
{
row[0]=a;
row[1]=b;
row[2]=c;
row[3]=d;
//do something
}
}
}
}由于在运行时并非一定是3个循环的嵌套,可能是20个甚至200个,所以代码不可能像这样写,可能要用递归的方式表达,请问递归如何写?
{
for(int i=0;i<200;i++)
{
row[index]=i;
if(index <intCounter) //intCounter 为递归次数
fun1(index+1);
else
dosomthing;
}
}
{
for(int i=0;i<200;i++)
{
row[index]=i;
if(index <intCounter)
{
fun1(index+1);
}
else
{
// dosomthing;
}
}
}
void Loop(int n)
{
if (n >=1)
{
for ( int i = 0 ; i < 200 ; i ++)
{
row[startRowIndex ++ ] = i;
Loop(n-1);
}
}
}
}
void Loop(int n, int startRowIndex = 0)
{
if (n >=1)
{
for ( int i = 0 ; i < 200 ; i ++)
{
row[startRowIndex] = i;
Loop(n-1,startRowIndex + 1);
}
}
}
1克西瓜含能量20mg,蛋白质10mg,脂肪5mg
1克米饭含能量35mg,蛋白质8mg,脂肪6mg
1克猪肉含能量50mg,蛋白质12mg,脂肪30mg
1克鸡蛋含能量11mg,蛋白质50mg,脂肪16mg
1克青菜含能量3mg,蛋白质5mg,脂肪6mg一餐的推荐量能量为800mg,蛋白质为200mg,脂肪为300mg低于或高于这个推荐量都不好,要尽量接近这个推荐量请问西瓜、米饭、猪肉、鸡蛋、青菜的最佳重量是多少?
算法如何?怎么算?
我想可能只能用穷举法来得到最佳值了,不过速度慢的受不了
先确定好要算几种食品,然后根据每个食品算该食品的上限,比如说西瓜
按照能量最大为800/20 =40克
按照蛋白质最大 200/10 =20克
按照脂肪最大 300/6=50克
所以西瓜的最大值为20数组row对应食物类别,max对应该食物的最大值,这样可以得到部分优化
实际还应该这么做,在每次循环前计算,假如满足条件,那么就不需要继续递归
先给你递归的方法,后面你再优化吧,呵呵public static void Cal(ref int[] row, int level, ref int[] max)
{
if (level < row.Length)
{
for (int i = 0; i < max[level]; i++)
{
row[level] = i;
Cal(ref row, level+1, ref max);
}
}
else
{
//do somethiing
Console.Write("\r\n");
for (int j = 0; j < row.Length; j++)
{
Console.Write("\t{0}", row[j]);
}
}
}