c语言编程邮资计算,C语言编程题(邮资组合)

在穷举和动态规划之间的一种算法

写得点马虎,有错误再所难免,请见谅.

算法比较容易理解.

//作者:baihacker

//时间:1.12.2006

#include

using namespace std;

const MAX =30 ;//最大面值为30

int mark[MAX*5+1][5];

bool isexist(int row, int col)

{

int m, n, a, b;

for (m=1;m

for (a=1;a

{

if (m+a!=row)

continue;

for (n=0;n

for (b=0;b

{

if (n+b+2!=col+1)

continue;

if (mark[m][n]+mark[a][b] == 2)

return true;

}

}

return false;

}

void main()

{

int i, j;

int data[4]={1, 3, 7, 12};

int data1[5][4];

for (i=0;i<5;i++)

{

for (j=0;j<4;j++)

{

data1[i][j] = (i+1)*data[j];

}

}

for (i=1;i

{

for (j=0;j<5;j++)

{

if (data1[j][0] == i ||

data1[j][1] == i ||

data1[j][2] == i ||

data1[j][3] == i ||

data1[j][4] == i)

mark[i][j] = 1;

else

mark[i][j] = 0;

}

}

int t;

for (i=1;i

{

for (j=1;j<5;j++)//张数的循环

{

if (mark[i][j]==1)//已经有由j+1张组成i了

continue;

if (isexist(i, j))

mark[i][j] = 1;

}

t = mark[i][0]+mark[i][1]+mark[i][2]+mark[i][3]+mark[i][4];

if (t==0)//i不能被组合出,退出

{

cout<

break;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值