| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1484 人关注过本帖
标题:输入一正整数,输出等于这个数的所有可能的由小到大的若干正整数相加的式子 ...
只看楼主 加入收藏
powerfrank
Rank: 2
等 级:论坛游民
帖 子:31
专家分:37
注 册:2018-4-25
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:3 
输入一正整数,输出等于这个数的所有可能的由小到大的若干正整数相加的式子。用递归来实现
这道题,卡了几个礼拜了,想不出怎么解,求大侠们解惑。

输入一正整数,输出等于这个数的所有可能的由小到大的若干正整数相加的式子。
例如:
输入 7
输出:
7=1+6
7=1+1+5
7=1+1+1+4
7=1+1+1+1+3
7=1+1+1+1+1+2
7=1+1+1+1+1+1+1
7=1+1+1+2+2
7=1+1+2+3
7=1+2+2+2
7=1+2+4
7=1+3+3
7=2+5
7=2+2+3
7=3+4

下面自己写的代码只能实现输出“7=1+1+1+1+1+1+1”及之前

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

int fenjie ( int , int ) ;

int main ()
{
   
    int  n , m ;
    printf ("请输入一个正整数:\n") ;
    scanf_s ("%d", &n) ;

    m = n ;

    if ( n > 1 )
    {
        fenjie ( n , m ) ;
    }
    else
    {
        printf ("输入不正确。\n") ;
    }

    system ("pause") ;
    return 0 ;
}
int fenjie ( int n , int m )
{
    if ( n == m )
    {
        printf ( "%d=" , m ) ;
    }

    if ( n >= 2 )
    {
        printf ( "1+%d\n", n-1 ) ;

        if ( n > 2 )
        {
            printf ("%d=", m ) ;
            for ( int tmp = m ; tmp > n - 1 ; tmp -- )
            {
                printf ( "1+" );
            }
        }

        fenjie ( n - 1 , m ) ;
    }

    return 0;
}

[此贴子已经被作者于2018-12-3 16:04编辑过]

搜索更多相关主题的帖子: 输入 正整数 输出 int printf 
2018-12-03 15:45
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:2 
你可以把 一个分解 写成 一个多叉树
这个题目就转换成一个多叉树递归遍历 深度优先

学过二叉树遍历就很好处理了

https://zh.
2018-12-03 16:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:8 
程序代码:
#include <stdio.h>
#include <string.h>

void fenjie( unsigned n );

int main( void )
{
    unsigned n;
    printf( "请输入一个正整数: " );
    scanf( "%u", &n );

    if( n > 1 )
        fenjie( n );
    else
        puts( "输入不正确。" );

    return 0;
}

void fenjie_( char* str, unsigned n, unsigned m )
{
    for( unsigned i=m; i<=n/2; ++i )
    {
        size_t len = strlen(str);
        sprintf( str+len, "%u+", i );
        fenjie_( str, n-i, i );
        str[len] = '\0';
    }
    printf( "%s%u\n", str, n );
}

void fenjie( unsigned n )
{
    char str[1024]; // 必须不小于 2*(n+1)
    sprintf( str, "%u=", n );
    fenjie_( str, n, 1 );
}

输入 7 后,输出为
程序代码:
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
7=7


收到的鲜花
  • 幻紫灵心2018-12-04 10:34 送鲜花  2朵  
  • powerfrank2018-12-04 16:03 送鲜花  1朵  
2018-12-04 09:11
powerfrank
Rank: 2
等 级:论坛游民
帖 子:31
专家分:37
注 册:2018-4-25
收藏
得分:0 
回复 3楼 rjsp
谢谢大神
2018-12-04 16:04
快速回复:输入一正整数,输出等于这个数的所有可能的由小到大的若干正整数相加的 ...
数据加载中...
 
   



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

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