学习总结——1.24

本文介绍了如何使用C语言实现一个解决P2404自然数拆分问题的程序,通过递归搜索所有可能的正整数之和的拆分方案。程序读取输入整数n,调用search函数并输出满足条件的拆分结果。
摘要由CSDN通过智能技术生成

1.题目:P2404 自然数的拆分问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

话不多说,上代码!

#include<stdio.h>
#include<stdlib.h>

int a[10001] = {1}, n;

void search(int s, int t);
void print(int t);

int main()
{
    scanf("%d", &n);
    search(n, 1);              //将要拆分的数n传递给s
    return 0;
}

void search(int s, int t)
{
    int i;
    for (i = a[t - 1]; i <= s; i++)
        if (i < n)                  //当前数i要大于等于前一位数,且不超过n
        {
            a[t] = i;               //保存当前拆分的数i
            s -= i;                 //s减去数i,s的值将继续拆分
            if (s == 0)
                print(t);           //当s=0时,拆分结束输出结果
            else
                search(s, t + 1);             //当s>0时,继续递归
            s += i;               //回溯:加上拆分的数,以便产生所有可能的拆分
        }
}

void print(int t)
{
    for (int i = 1; i <= t - 1; i++)      //输出一种拆分方案
        printf("%d+", a[i]);
    printf("%d\n", a[t]);
}
整个思路就是将一个正整数n拆分成若干个正整数之和。程序首先读取一个整数n,然后调用search函数进行拆分。search函数使用递归的方式尝试所有可能的拆分方案,当找到一个满足条件的拆分方案时,调用print函数输出结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值