62,612
社区成员
发帖
与我相关
我的任务
分享
public class Money_digui_2 {
/**
* @param args
*/
private static final int LEN = 3;
static int[] a={1,2,5};
public static void main(String[] args) {
System.out.println("种数="+pay(100,0));
}
public static int remain(int i){
//求出当前未使用的钞票之和 7 5
int total = 0;
for(int j=LEN-1;j>i;j--)
total += a[j];
return total;
}
private static int pay(int total, int i) {
int count = 0;
if(i>2){
if(total == 0){
//当总钱数减完时,一种方案完成,返回1
return 1;
}
return 0;
}
else {
//判断余额是否小于于等于没用的钞票,如果没有,不能再选当前的钞票了
for(int n=1;total-n*a[i]>=remain(i);n++){
count += pay(total-n*a[i],i+1);
}
}
return count;
}
public class PayType {
private static int count=0;
private static int coins[]={1,2,5};
public static void main(String[] args) {
int amount=1*100;
int coinsCount[]=new int[coins.length];
//先每种至少一张
for(int i=coinsCount.length-1;i>=0;i--)
{
amount-=coins[i];
coinsCount[i]=1;
}
//从最大开始付
pay(amount,coinsCount.length-1,coinsCount);
System.out.println("count:"+count);
}
private static void print(int coinsCount[])
{
count++;
String str="";
int total=0;
for(int i=coinsCount.length-1;i>=0;i--)
{
if(i==coinsCount.length-1)
str+=coins[i]+"*"+coinsCount[i];
else
str+="+"+coins[i]+"*"+coinsCount[i];
total+=coins[i]*coinsCount[i];
}
System.out.println(str+"="+total);
}
private static void pay(int amount,int coinIdx,int srcCoinsCount[])
{
int coin=coins[coinIdx];
int[] coinsCount=new int[srcCoinsCount.length];
for(int i=0;i<coinsCount.length;i++)
{
coinsCount[i]=srcCoinsCount[i];
}
//如果是最小一种
if(coinIdx==0)
{
//整除,则合适
if(amount%coin==0)
{
coinsCount[coinIdx]+=amount/coin;
print(coinsCount);
}
return;
}
if(amount>=coin)
{
//用下一种面值付
pay(amount,coinIdx-1,coinsCount);
//继续用当前面值付
coinsCount[coinIdx]++;
amount-=coin;
pay(amount,coinIdx,coinsCount);
}
//不够,则用下一种面值付
else
{
pay(amount,coinIdx-1,coinsCount);
}
}
}
#include<iostream>
using namespace std;
#define LEN 3
int a[] = {1, 2, 5};
int remain(int i){
int total = 0;
for(int j=LEN-1;j>i;j--)
total += a[j];
return total;
}
long dfs(int total, int i){
if(i>=3){
if(total==0)
return 1;
return 0;
}
long res = 0;
for(int num=1;total-a[i]*num>=remain(i);++num){
res += dfs(total-num*a[i], i+1);
}
return res;
}
int main(){
printf("%ld\n", dfs(100, 0));
}