c语言-C语言 递归,好像跳不出递归循环了,求大神帮忙看看

问题描述

C语言 递归,好像跳不出递归循环了,求大神帮忙看看

啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。

int num_pi=0;
int num_yin=1;
int money = 823;

int fun(int mon);
int main()
{
    fun(0);
    return 0;
 }
int fun(int mon)
 {
    if(mon > money)
        return 0;
    if(mon == money && num_pi<num_yin){
            printf("%dn",num_pi);
            return 0;
     }
     num_pi++;
     fun(mon+23);
     num_yin++;
     fun(mon+19);
 }

解决方案

 void foo(int beer, int beverage)
{
    if (beer < 0 || beverage < 0) return;
    if (beer * 23 + beverage * 19 == 823)
    {
        if (beer < beverage)
            printf("%d %dn", beer, beverage);
    }
    if (beer * 23 + beverage * 19 < 823)
    {
        foo(beer, beverage + 1);
    }
    else
    {
        foo(beer - 1, beverage);
    }
}
int main()
{
    foo(823 / 23, 0);
}

解决方案二:

加多一个条件,会快很多

 #include <iostream>
int num_pi=0;
int num_yin=0;
int money = 823;

int fun(int mon);
int main()
{
    fun(0);
    return 0;
 }
int fun(int mon)
 {
    if(mon > money||num_pi>num_yin)
        return 0;
    if(mon == money && num_pi<num_yin){
            printf("%dn",num_pi);
            return -1;
     }
     num_pi++;
     if(fun(mon+23)==-1){
        return -1;
     }
     num_pi--;
     num_yin++;
     if(fun(mon+19)==-1){
        return -1;
     }
     num_yin--;
 }

解决方案三:

11 30
http://codepad.org/D17vzJEB

解决方案四:

思路,beer从大到小,beverage从小到大,如果多了就减酒,如果少了,就加饮料。

解决方案五:

递归解题有点暴力,需要枚举所有组合,除条件设置排除外。

解决方案六:

貌似算法不怎么好,时间太久

 #include <iostream>
int num_pi=0;
int num_yin=0;
int money = 823;

int fun(int mon);
int main()
{
    fun(0);
    return 0;
 }
int fun(int mon)
 {
    if(mon > money)
        return 0;
    if(mon == money && num_pi<num_yin){
            printf("%dn",num_pi);
            return -1;
     }
     num_pi++;
     if(fun(mon+23)==-1){
        return -1;
     }
     num_pi--;
     num_yin++;
     if(fun(mon+19)==-1){
        return -1;
     }
     num_yin--;
 }
时间: 2025-01-02 04:20:41

c语言-C语言 递归,好像跳不出递归循环了,求大神帮忙看看的相关文章

c语言-求大神帮忙看看,好像是指针用错了,但我找不出错

问题描述 求大神帮忙看看,好像是指针用错了,但我找不出错 #include<stdio.h> int main() { int max(int *a); int min(int *b); int aver(int *c); int a[8]; printf("please type eight num:"); for (int i = 0; i < 8; i++) { scanf_s("%d", &a[i]); } printf("

rvm-相关向量机(RVM)的C语言算法,求大神帮忙?

问题描述 相关向量机(RVM)的C语言算法,求大神帮忙? 7C 相关向量机(RVM)的C语言算法实现,不知哪位大神能给与指导-- 解决方案 这东西用C写起来可复杂了,一般是matlab写好了,做成dll给C调用 参考下:http://download.csdn.net/detail/daleloogn/7143069

程序设计-这个C语言程序怎么写,求大神帮忙

问题描述 这个C语言程序怎么写,求大神帮忙 题目二十四:职工工资管理系统 功能设计要求(1-2人) 1. 输入记录:将每一个职工的姓名.ID号以及基本工资.职务工资.岗位津贴.医疗保险.公积金的数据作为一个记录.?该软件能建立一个新的数据文件或给已建立好的数据文件增加记录. 2. 显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资. 3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示. 4.查找记录:可以对数据文件的任意记录的数据

c语言-求大神帮忙 数据结构课程设计怎么做都运行不不起来,下周就要交了,拜托拜托T^T

问题描述 求大神帮忙 数据结构课程设计怎么做都运行不不起来,下周就要交了,拜托拜托T^T 输入文件中含有待格式化(或成为待排版)的文本,由多行文字组成.每一行由一系列被一个或多个空格符所隔开的字所组成,任何完整的字都没被分隔在两行,每行字数不超过80.除了上述文本类字符外,还存在起控制作用的字符:符号"@"指示它后面的正文在格式化时应另起一段排放,即空一行,并在段首缩入8个字符位置."@"自成一个字,一个文本格式化程序可以处理上述输入文件,按照用户指定的版面规格重排

c语言-求大神帮忙 C语言 LeetCode的 Two Sum问题

问题描述 求大神帮忙 C语言 LeetCode的 Two Sum问题 求大神帮忙.我run时显示Runtime Error,不知道问题在哪里.. 还有,我也不理解注释中的: * Note: The returned array must be malloced, assume caller calls free(). 这句是什么意思 题目: Given an array of integers, find two numbers such that they add up to a specif

c语言-C语言 带分数问题 求大神帮忙看看

问题描述 C语言 带分数问题 求大神帮忙看看 /*------------------------------------------------------------------------------------------------------------------标题:带分数100 可以表示为带分数的形式:100 = 3 + 69258 / 714还可以表示为:100 = 82 + 3546 / 197注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0).题目要求:从标准

游戏-求大神~帮忙改一下。把这串代码改成函数的方式(问题是:用C语言函数制作石头剪刀布)

问题描述 求大神~帮忙改一下.把这串代码改成函数的方式(问题是:用C语言函数制作石头剪刀布) #include #include #include #include void printMenu(void) { printf("tt -------------------------------------------n"); printf("tt| 石头剪刀布游戏 |n"); printf("tt| ---------------------------

c语言问题 新手求解-司机与售票员问题o( =?ω?= )m求大神帮忙

问题描述 司机与售票员问题o( =?ω?= )m求大神帮忙 如何用C语言模拟协调司机与售票员问题PV操作代码的设计与实现o( =?ω?= )m应该怎么做.求大神帮忙(*/ω\*) 解决方案 无非就是生产者消费者问题,不管名词换成什么,都是一样的. 解决方案二: http://blog.csdn.net/zgrjkflmkyc/article/details/8971894

c语言-新手OJ, C语言 字符串顺序后移模块,超时,优化无思路 求大神对指点

问题描述 新手OJ, C语言 字符串顺序后移模块,超时,优化无思路 求大神对指点 for(i=1; i<=m; i++){ a=z[n]; for(p=&z[n]; p>=&z[2]; p--)p=(p-1); z[1]=a; } ++++++++++++++++++++++++++++++++++++++++ 作用:将数组z[n]中的所有元素进行向右移m位, 多出来的左端补上. 例如: 12345 m=1 变成 51234 但是我的算法效率太低, 当数组很长, m很大时超时,