用C语言如何编写这个算法?

HarveyBoys 2014-06-29 05:04:32
100元的具体划分方案,可选面值有1元、10元、20元、50元、100元
...全文
177 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
心之痕 2014-06-29
  • 打赏
  • 举报
回复
深度优先搜索+回溯

#include<stdio.h>

static int money[] = { 100, 50, 20, 10, 1 };
static int stack[110];
static int index = 0;

static void dfs(int sum, int max)
{
	int i;
	if (sum > 100)
		return;
	else if (sum == 100)
	{
		for (i = 0; i < index; i++)
			printf("%d ", stack[i]);
		putchar('\n');
		return;
	}
	for (i = 0; i < 5; i++)
		if (money[i] <= max)
		{
			stack[index++] = money[i];
			dfs(sum + money[i], money[i]);
			index--;
		}
}

int main()
{
	dfs(0, 100);
	return 0;
}

707wk 2014-06-29
  • 打赏
  • 举报
回复
仅供参考
/*
 * 100元的具体划分方案,可选面值有1元、10元、20元、50元、100元 
 */
#include <stdio.h>

#define MONEY 100

int money[]={1,10,20,50,100};

int check_money(int num[],int n)
{
	int i;
	int sum=0;
	
	for(i=0;i<n;i++)
	{
		sum=sum+num[i]*money[i];
	}
	if(sum<100)return 1;
	if(sum==100)return 2;
	return 0;
}

void putmoney(int num[])
{
	int i;
	printf("100=");
	for(i=0;i<5;i++)
	{
		if(num[i])printf("%d*%d+",money[i],num[i]);
	}
	printf("\b \n");
}

int main()
{
	int num[5];
	for(num[0]=100;num[0]>=0;num[0]--)
		if(check_money(num,1))
		for(num[1]=10;num[1]>=0;num[1]--)
				if(check_money(num,2))
				for(num[2]=5;num[2]>=0;num[2]--)
					if(check_money(num,3))
					for(num[3]=2;num[3]>=0;num[3]--)
						if(check_money(num,4))
						for(num[4]=1;num[4]>=0;num[4]--)
							if(check_money(num,5)==2)putmoney(num);
	return 0;
}
____Dolo 2014-06-29
  • 打赏
  • 举报
回复
#include<stdio.h> int a[5]={100,50,20,10,1}; int q(int n,int i){ if(n<0)return 0; if(i==4||n==0) return 1; return q(n,i+1)+q(n-a[i],i); } int main(){ printf("%d\n",q(100,0)); return 0; } 不知道对不对...

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧