酒煮青梅392 2023-10-20 18:05 采纳率: 65.2%
浏览 53
已结题

c语言递归求硬币面值组合

img


#include <stdio.h>
/**********   Begin   **********/

//可以在此增加其他内容
void Cal2(int n,int i,int j,int k)
{
    int i1=i,j1=j,k1=k;
    if(n==0)
    {
        printf("%d %d %d \n",i1,j1,k1);
    }
    else if(n>=i1+j1*2+k1*5)
    {
        
            if(i1<=n)
            Cal2(n-i1-2*j1-5*k1,i1+1,j1,k1);
        
            if(i1+j1*2<=n)
            Cal2(n-i1-2*j1-5*k1,i1,j1+1,k1);
        
            if(i1+j1*2+k1*5<=n)
            Cal2(n-i1-2*j1-5*k1,i1,j,k1+1);
        
    
    }

}



void Cal(int n)
{
    //在此补充代码完成Cal函数功能
    int a = n;
    Cal2(a,0,0,0);
    
}

int main()
{
    int q;
    scanf("%d",&q);
    Cal(q);
}

/**********   End   **********/

img


这个代码输出有问题,不知道是哪里逻辑错了

  • 写回答

2条回答 默认 最新

  • 想要AC的dly 2023-10-20 18:40
    关注
    #include <stdio.h>
    void Cal2(int n,int i,int j,int k)//n表示当前剩余n价值的钱等待分配,ijk分别表示1、2、5角钱个数
    {
        int i1=i,j1=j,k1=k;
        if(n==0)                //不需要继续分配了直接输出方案
        {
            printf("%d %d %d \n",i1,j1,k1);
            return;
        }
        else if(n>0)            //还需要继续分配
        {
            Cal2(n-1,i1+1,j1,k1);       //优先考虑1角个数多的
            Cal2(n-2,i1,j1+1,k1);       //然后考虑2角个数多的
            Cal2(n-5,i1,j1,k1+1);          //最后考虑5角
        }
        else return;
    }
    
    void Cal(int n)         //不知道有啥用,没改
    {
        //在此补充代码完成Cal函数功能
        int a = n;
        Cal2(a,0,0,0);
    }
    
    int main()
    {
        int q;
        scanf("%d",&q);
        Cal(q);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月27日
  • 已采纳回答 10月20日
  • 创建了问题 10月20日

悬赏问题

  • ¥20 求下下面这个数据结构代码
  • ¥15 路由器考试怎么办,有懂行的吗 ,eNSP
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来
  • ¥15 java 判断某个数 区间是否存在
  • ¥15 appium控制多个雷电模拟器问题
  • ¥15 C# iMobileDevice
  • ¥15 谁会做这个啊#ensp#Boson NetSim
  • ¥15 如何编写针对TPS6503320FRGE型号的电源管理芯片的编程代码?
  • ¥15 设计简单目录管理系统,要满足以下内容