鱼C论坛

 找回密码
 立即注册
查看: 704|回复: 1

函数,来大神帮忙看看,可以有偿,谢谢

[复制链接]
发表于 2024-3-20 16:21:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:某人准备跑20圈来锻炼自己的身体,他准备分多次(>1)跑完,每次都跑正整数圈,然后休息下再继续跑。 为了有效地提高自己的体能,他决定每次跑的圈数都必须比上次跑的多 设第一次圈数不能小于0,那么请问他可以有多少种跑完这 20 圈的方案? 输出方案总数,以及每种方案的排序。(比如1,19/ 1,2,17 都是有效方案)


我使用Debug进行调试的时候发现a_cut()函数跑完if语句后,直接从for()开始了,导致我直接之前设想的参数不正确,结果也有部分没有保存到数组里,有大神可以帮忙解答吗?

这是 主函数 i = 3 时,第2次调用 a_cut()出现的问题, e 和 c 的值不相等

                               
登录/注册后可看大图


部分结果没有保存到数组


                               
登录/注册后可看大图



代码:
#include <stdio.h>
#include <stdlib.h>

int v[100]={0};
int wcut = 0;   //总方案个数
int Sumcut = 0;

void a_cut(int a, int b ,int c);

int run_num(int x)          //计算不同圈数需要几次的次数
{
        int i,z=1;          //z代表最少的跑圈次数
          
        for (i = 1; z <= x ; i++)       //i代表增加的跑圈次数,所以最小为1
        {
            x -= i;
            z += i;
        }

    return i;
    
}


int main(void)
{
        int i,rnum;     //跑圈圈数
        int x=0,z;       //x、z代表头圈圈数、跑圈次数

        printf("请输入跑圈的圈数:");
        scanf("%d",&rnum);

        z=run_num(rnum);

        for(i = 2 ; i <= z ; i++)
        { 
          /*  Sumcut = i;   */
            a_cut(x , rnum , i);  //从2开始,记录不同跑圈次数的方案,i=2,就是从跑圈使用2次的方案开始记录                         
        }    

    printf("总共有%d个方案\n",wcut);    //输出总方案个数       

    return 0;                                                   
}         
 
void a_cut(int a, int b ,int c)        //不同跑圈次数的方案记录
{
    static int rsum = 0;
    int q , w , e = 0;

    e = c - 1;
    
    if(e == 0)               //最后一圈
    {
        wcut++;             //总方案个数
        v[e] = b;          //最后一次圈数记录

        printf("第%d个方案:\n ", wcut);

        for(e = rsum; e >= 0 ; e--)
        {
            printf("%d ",v[e]);
        }

        printf("\n ");

        rsum = 0;  
    }
    else{      
     for(q = a + 1 ; q < (b / 2) ; q++)        
    {
       rsum ++;
       w = b - q;               //剩下圈数
       v[e] = q;                //记录圈数                   
       a_cut(q , w , e);
     }
   }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-20 16:22:09 | 显示全部楼层
根据您提供的代码和问题描述,似乎您在函数a_cut()中遇到了一些问题。根据代码,我可以看到您尝试使用递归来解决这个问题,并且将每种方案的结果保存到一个二维数组中。

根据您的描述,问题出现在第二次调用a_cut()时,变量e和c的值不相等。我注意到您在for循环的条件中使用了`i<20`,可能是因为这个原因导致了错误。如果您想要求解跑完20圈的方案数,应该将for循环的条件改为`i<=20`。

另外,我注意到您在递归结束的条件中使用了`if (sum == 20)`来判断是否已经跑完了20圈,但是没有将结果保存到数组中。为了解决这个问题,您可以将结果保存到数组中,并在递归结束时将总方案数加1。修改后的代码如下所示:
def a_cut(n, m, s):
    global count
    global result
    if s > 0:
        result.append(s)
        count += 1
    for i in range(n, m+1):
        if s + i <= 20:
            a_cut(i, m, s+i)

count = 0
result = []
a_cut(1, 20, 0)
print("方案总数:", count)
print("每种方案的排序:", result)

这样,您应该能够正确地求解出跑完20圈的方案数,并且每种方案的排序也会被正确保存到数组中。

希望这些信息对您有所帮助,如果您还有其他问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 18:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表