您的位置:首页 > 编程语言 > C语言/C++

邮票组合---c语言

2020-01-15 12:05 1476 查看

问题描述:

我们邮寄都是贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或几张的组合,可以满足不同邮件的不同邮资。现在,邮局有4种不同面值的邮票。在每个信封上最多能贴5张邮票,面值可以相同也可以不同,要求编程求出用4种面值所能组成的邮资的最大值。

问题分析:

输入:4种邮票的面值。

输出:用这4种面值组成的邮资最大值。

对该问题进行数学分析,不同张数和面值的邮票所组成的邮资可使用下列公式计算:

S=a*i+b*j+c*k+d*l

其中i为a分邮票的张数,j为b分邮票的张数,k为c分邮票的张数,l为d分邮票的张数。

按题目的要求,a,b,c,d分的邮票均可以取0,1,2,3,4,5张,但总共5张。可以采用穷举方法进行组合,从而求出这些不同面值。不同张数的邮票组合后的邮资

下面是完整的程序:

#include <stdio.h>

int main()

{

    int a,b,c,d,i,j,k,l;

    static int s[1000];/*邮资*/

    scanf("%d%d%d%d,&a&b&c&d");/*输入四种面值邮票*/

    for(i=0;i<=5;i++)/*循环变量i用于控制a分面值邮票的张数,最多5张*/

        for(j=0;i+j<=5;j++)/*循环变量j用于控制b分面值邮票的张数,a分邮票+b分邮票最多5张*/

            for(k=0;i+j+k<=5;k++)/*循环变量k用于控制c分面值邮票的张数,a分邮票+b分邮票+c分邮票最多5张*/

                for(l=0;i+j+k+l<=5;l++)/*循环变量l用于控制d分面值邮票的张数,a分邮票+b分邮票+c分邮票+d分邮票最多5张*/

                    if(a*i+b*j+c*k+d*l)

                        s[a*i+b*j+c*k+d*l]++;

    for(i=1;i<=1000;i++)

        if(!s[i])

            break;

        printf("The max is %d.\n",--i);

        return 0;

}

运行结果:

1 3 5 10

The  max is 36.

 

此文章内容以及实例来源于《c语言学习app》,仅供学习/参考,谢谢共享

 

 

  • 点赞
  • 收藏
  • 分享
  • 文章举报
小志1989 发布了38 篇原创文章 · 获赞 3 · 访问量 875 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: