int x, y, z; for (x = 0; x <= 100; x++) { for (y = 100 - x; y >= 0; y--) { for (z = 100 - x - y; z >= 0; z--) { if (1 * x + y * 2 + z * 5 == 100) Response.Write(string.Format("1*{0}+2*{1}+5*{2}<br/>", x, y, z)); } } }
for (int i = 0; i <= 20; i++) { for (int j = 0; j <= (100 - 5 * i) / 2;j++ ) { for (int k = 0; k <= 100 - 5 * i - 2 * j; k++) { if (5 * i + 2 * j + k == 100) { Console.WriteLine(i + " " + j + " " + k); } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Collections; using System.Xml.Linq;namespace ConsoleCSharp {
for (x = 0; x <= 100; x++)
{
for (y = 100 - x; y >= 0; y--)
{
for (z = 100 - x - y; z >= 0; z--)
{
if (1 * x + y * 2 + z * 5 == 100)
Response.Write(string.Format("1*{0}+2*{1}+5*{2}<br/>", x, y, z));
}
}
}
//f(n) = f(n-5) + f(n-2) + f(n-1);
//任何数量 n 的钱,可有有3种方式累加到
//1. 由 n-5 的钱 加 5 块得到(大于5时)
//2. 由 n-2 的钱 加 2 块得到(大于2时)
//3. 由 n-1 的钱 加 1 块得到(大于1时)
//如果这里直接用递归的话,效率比较低,当参数比较大时也容易溢出
public static int GetTheNum(int value)
{
int[] nums = {1,2,3,5,8};//这里投机了下 先把1-5块的方式初始化了
if (value < 1) return 0;
if(value < 6) return nums[value-1]; int temp = 0;
while (value - 5 > 0)
{
temp = nums[4] + nums[3] + nums[0];
for (int i = 0; i < 4; i++)
{
nums[i] = nums[i + 1];
}
nums[4] = temp;
value--;
}
return temp;
}楼主 我打印语句没加呢 你先看看这个
我再琢磨下怎么把打印也给加进去 我也菜鸟 呵呵
for (int i = 0; i <= 20; i++)
{
for (int j = 0; j <= (100 - 5 * i) / 2;j++ )
{
for (int k = 0; k <= 100 - 5 * i - 2 * j; k++)
{
if (5 * i + 2 * j + k == 100)
{
Console.WriteLine(i + " " + j + " " + k);
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Xml.Linq;namespace ConsoleCSharp
{
class Program
{
static void Main(string[] args)
{
int[] arrInt = new int[] { 1, 2, 5 };
count(100 , arrInt,"");
}
public static void count(int n, int[] arr,string s)
{
if (n < 0)
return;
if (n == 0)
{
Console.WriteLine(s);
}
for (int i = 0; i <arr.Length; i++)
{
count(n - arr[i], arr,s + arr[i]);
} }
}
}用递归来实现
class Class1
{
public static void Main(string[] args)
{
PrintHowToDivide(100);
System.Console.ReadKey();
}
public static void PrintHowToDivide(int value)
{
int temp = value;
int five = value / 5;
value %= 5;
int two = value / 2;
value %= 2;
int one = value;
PrintHowToDivide(temp, five, two, one);
}
/*
* value为需要分解的钱,num_five, num_two, num_one 分别为当前的 5 2 1块的张数
*
* */
private static void PrintHowToDivide(int value, int num_five, int num_two, int num_one)
{
System.Console.WriteLine(" {0} 块钱有如下分法: {1} 张 1 元,{2} 张 2 元,{3} 张 5 元",value,num_one,num_two,num_five);
if (num_one == value) return;
if (num_five > 0)
{
if (num_one > 0)
{
PrintHowToDivide(value, num_five - 1, num_two + 3, num_one - 1);
}
else
{
PrintHowToDivide(value, num_five - 1, num_two + 2, num_one + 1);
}
}
else if(num_two > 0)
{
PrintHowToDivide(value, num_five, num_two - 1, num_one + 2);
}
} }这下可以了 哈哈 很快的
{
public static void Main(string[] args)
{
PrintHowToDivide(100);
System.Console.ReadKey();
}
public static void PrintHowToDivide(int value)
{
int temp = value;
int five = value / 5;
value %= 5;
int two = value / 2;
value %= 2;
int one = value;
PrintHowToDivide(temp, five, two, one);
}
/*
* value为需要分解的钱,num_five, num_two, num_one 分别为当前的 5 2 1块的张数
*
* */
private static void PrintHowToDivide(int value, int num_five, int num_two, int num_one)
{
System.Console.WriteLine(" {0} 块钱有如下分法: {1} 张 5 元,{2} 张 2 元,{3} 张 1 元", value, num_five, num_two, num_one);
if (num_one == value) return;
if (num_two > 0)
{
PrintHowToDivide(value, num_five, num_two - 1, num_one + 2);
}
else if (num_five > 0)
{
if (num_one > 0)
{ PrintHowToDivide(value, num_five-1, num_two + 3, num_one - 1); }
else
{
PrintHowToDivide(value, num_five-1, num_two + 2, num_one + 1);
}
}
}
}测试结果
100 块钱有如下分法: 20 张 5 元,0 张 2 元,0 张 1 元
100 块钱有如下分法: 19 张 5 元,2 张 2 元,1 张 1 元
100 块钱有如下分法: 19 张 5 元,1 张 2 元,3 张 1 元
100 块钱有如下分法: 19 张 5 元,0 张 2 元,5 张 1 元
100 块钱有如下分法: 18 张 5 元,3 张 2 元,4 张 1 元
100 块钱有如下分法: 18 张 5 元,2 张 2 元,6 张 1 元
100 块钱有如下分法: 18 张 5 元,1 张 2 元,8 张 1 元
100 块钱有如下分法: 18 张 5 元,0 张 2 元,10 张 1 元
100 块钱有如下分法: 17 张 5 元,3 张 2 元,9 张 1 元
100 块钱有如下分法: 17 张 5 元,2 张 2 元,11 张 1 元
100 块钱有如下分法: 17 张 5 元,1 张 2 元,13 张 1 元
100 块钱有如下分法: 17 张 5 元,0 张 2 元,15 张 1 元
100 块钱有如下分法: 16 张 5 元,3 张 2 元,14 张 1 元
100 块钱有如下分法: 16 张 5 元,2 张 2 元,16 张 1 元
100 块钱有如下分法: 16 张 5 元,1 张 2 元,18 张 1 元
100 块钱有如下分法: 16 张 5 元,0 张 2 元,20 张 1 元
100 块钱有如下分法: 15 张 5 元,3 张 2 元,19 张 1 元
100 块钱有如下分法: 15 张 5 元,2 张 2 元,21 张 1 元
100 块钱有如下分法: 15 张 5 元,1 张 2 元,23 张 1 元
100 块钱有如下分法: 15 张 5 元,0 张 2 元,25 张 1 元
100 块钱有如下分法: 14 张 5 元,3 张 2 元,24 张 1 元
100 块钱有如下分法: 14 张 5 元,2 张 2 元,26 张 1 元
100 块钱有如下分法: 14 张 5 元,1 张 2 元,28 张 1 元
100 块钱有如下分法: 14 张 5 元,0 张 2 元,30 张 1 元
100 块钱有如下分法: 13 张 5 元,3 张 2 元,29 张 1 元
100 块钱有如下分法: 13 张 5 元,2 张 2 元,31 张 1 元
100 块钱有如下分法: 13 张 5 元,1 张 2 元,33 张 1 元
100 块钱有如下分法: 13 张 5 元,0 张 2 元,35 张 1 元
100 块钱有如下分法: 12 张 5 元,3 张 2 元,34 张 1 元
100 块钱有如下分法: 12 张 5 元,2 张 2 元,36 张 1 元
100 块钱有如下分法: 12 张 5 元,1 张 2 元,38 张 1 元
100 块钱有如下分法: 12 张 5 元,0 张 2 元,40 张 1 元
100 块钱有如下分法: 11 张 5 元,3 张 2 元,39 张 1 元
100 块钱有如下分法: 11 张 5 元,2 张 2 元,41 张 1 元
100 块钱有如下分法: 11 张 5 元,1 张 2 元,43 张 1 元
100 块钱有如下分法: 11 张 5 元,0 张 2 元,45 张 1 元
100 块钱有如下分法: 10 张 5 元,3 张 2 元,44 张 1 元
100 块钱有如下分法: 10 张 5 元,2 张 2 元,46 张 1 元
100 块钱有如下分法: 10 张 5 元,1 张 2 元,48 张 1 元
100 块钱有如下分法: 10 张 5 元,0 张 2 元,50 张 1 元
100 块钱有如下分法: 9 张 5 元,3 张 2 元,49 张 1 元
100 块钱有如下分法: 9 张 5 元,2 张 2 元,51 张 1 元
100 块钱有如下分法: 9 张 5 元,1 张 2 元,53 张 1 元
100 块钱有如下分法: 9 张 5 元,0 张 2 元,55 张 1 元
100 块钱有如下分法: 8 张 5 元,3 张 2 元,54 张 1 元
100 块钱有如下分法: 8 张 5 元,2 张 2 元,56 张 1 元
100 块钱有如下分法: 8 张 5 元,1 张 2 元,58 张 1 元
100 块钱有如下分法: 8 张 5 元,0 张 2 元,60 张 1 元
100 块钱有如下分法: 7 张 5 元,3 张 2 元,59 张 1 元
100 块钱有如下分法: 7 张 5 元,2 张 2 元,61 张 1 元
100 块钱有如下分法: 7 张 5 元,1 张 2 元,63 张 1 元
100 块钱有如下分法: 7 张 5 元,0 张 2 元,65 张 1 元
100 块钱有如下分法: 6 张 5 元,3 张 2 元,64 张 1 元
100 块钱有如下分法: 6 张 5 元,2 张 2 元,66 张 1 元
100 块钱有如下分法: 6 张 5 元,1 张 2 元,68 张 1 元
100 块钱有如下分法: 6 张 5 元,0 张 2 元,70 张 1 元
100 块钱有如下分法: 5 张 5 元,3 张 2 元,69 张 1 元
100 块钱有如下分法: 5 张 5 元,2 张 2 元,71 张 1 元
100 块钱有如下分法: 5 张 5 元,1 张 2 元,73 张 1 元
100 块钱有如下分法: 5 张 5 元,0 张 2 元,75 张 1 元
100 块钱有如下分法: 4 张 5 元,3 张 2 元,74 张 1 元
100 块钱有如下分法: 4 张 5 元,2 张 2 元,76 张 1 元
100 块钱有如下分法: 4 张 5 元,1 张 2 元,78 张 1 元
100 块钱有如下分法: 4 张 5 元,0 张 2 元,80 张 1 元
100 块钱有如下分法: 3 张 5 元,3 张 2 元,79 张 1 元
100 块钱有如下分法: 3 张 5 元,2 张 2 元,81 张 1 元
100 块钱有如下分法: 3 张 5 元,1 张 2 元,83 张 1 元
100 块钱有如下分法: 3 张 5 元,0 张 2 元,85 张 1 元
100 块钱有如下分法: 2 张 5 元,3 张 2 元,84 张 1 元
100 块钱有如下分法: 2 张 5 元,2 张 2 元,86 张 1 元
100 块钱有如下分法: 2 张 5 元,1 张 2 元,88 张 1 元
100 块钱有如下分法: 2 张 5 元,0 张 2 元,90 张 1 元
100 块钱有如下分法: 1 张 5 元,3 张 2 元,89 张 1 元
100 块钱有如下分法: 1 张 5 元,2 张 2 元,91 张 1 元
100 块钱有如下分法: 1 张 5 元,1 张 2 元,93 张 1 元
100 块钱有如下分法: 1 张 5 元,0 张 2 元,95 张 1 元
100 块钱有如下分法: 0 张 5 元,3 张 2 元,94 张 1 元
100 块钱有如下分法: 0 张 5 元,2 张 2 元,96 张 1 元
100 块钱有如下分法: 0 张 5 元,1 张 2 元,98 张 1 元
100 块钱有如下分法: 0 张 5 元,0 张 2 元,100 张 1 元
耗时31毫秒
class Class1
{
public static void Main(string[] args)
{
PrintHowToDivide(100);
System.Console.ReadKey();
}
public static void PrintHowToDivide(int value)
{
int temp = value;
int five = value / 5;
value %= 5;
int two = value / 2;
value %= 2;
int one = value;
PrintHowToDivide(temp, five, two, one);
}
/*
* value为需要分解的钱,num_five, num_two, num_one 分别为当前的 5 2 1块的张数
*
* */
private static void PrintHowToDivide(int value, int num_five, int num_two, int num_one)
{
System.Console.WriteLine(" {0} 块钱有如下分法: {1} 张 5 元,{2} 张 2 元,{3} 张 1 元", value, num_five, num_two, num_one);
if (num_one == value) return;
if (num_two > 0)
{
PrintHowToDivide(value, num_five, num_two - 1, num_one + 2);
}
else if (num_five > 0)
{
PrintHowToDivide(value, num_five - 1, num_two + (num_one + 5) / 2, (num_one + 5) % 2);
}
}
}
keeya0416,感谢这们仁兄
JAVA阵营叛变过来的