标题:蓝桥杯 啤酒与饮料 递归算法
取消只看楼主
cs1344
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2014-3-2
结帖率:100%
已结贴  问题点数:20 回复次数:1 
蓝桥杯 啤酒与饮料 递归算法
#include<stdio.h>
double i=1.9,j=2.3,s=0;

void f(int n,int p,double q)
{     
    if(q<0) return;
    if(q==s&&n<p){//钱为0 且饮料多于啤酒
        printf("啤酒=%d\t饮料=%d",n,p);
        return;
    }
    f(n,p+1,q-i);//买饮料
    f(n+1,p,q-j);//买啤酒
}
int main()
{
    f(0,0,82.3);
    return 0;
}  求解为什么算不出来结果
 
问题  啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。

    我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。

[ 本帖最后由 cs1344 于 2015-3-25 21:05 编辑 ]
搜索更多相关主题的帖子: return double include 啤酒 饮料 
2015-03-25 21:04
cs1344
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2014-3-2
得分:0 
回复 2楼 诸葛欧阳
递归不麻烦啊 只不过占用时间的确比for要久 问题找出来了 少了一个判断条件
#include<stdio.h>
double i=1.9,j=2.3,s=0;

void f(int n,int p,double q)
{     
    if(q<0) return;
    else if(q==s&&n<p){//钱为0 且饮料多于啤酒
        printf("啤酒=%d\t饮料=%d",n,p);
        return;
    }
    else if(q==s&&n>=p)return;
   
    f(n,p+1,q-i);//买饮料 -1.9
    f(n+1,p,q-j);//买啤酒 -2.3
}
int main()
{
    f(0,0,82.3);
    return 0;
}
2015-03-26 19:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443097-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.233095 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved