『每日一题 2012-02-13』整数划分问题

简介: <p>问题描述:</p> <p><span style="font-family:arial,宋体,sans-serif; font-size:14px; line-height:24px; background-color:rgb(252,254,252)"></span></p> <pre id="question-content" style="margin-top:0px; m

问题描述:

对于正整数n=6,可以分划为: 
6 
5+1 
4+2, 4+1+1 
3+3, 3+2+1, 3+1+1+1 
2+2+2, 2+2+1+1, 2+1+1+1+1 
1+1+1+1+1+1+1 
现在的问题是,对于给定的正整数n,编写算法打印所有划分。

算法实现:

可以求出具体划分方式

#include <stdio.h>
#define MAX 100
int d[MAX]; /* 用来存放分解结果 */

void decompose(int m, int n, int k); /* 将m分解为不大于n的组成数,k>=0是项号 */

int main()
{
    int n;
    printf("input n:");
    scanf("%d", &n);
	decompose(n, n, 0);
    return 0;
}

void decompose(int m, int n,int k)
{
    int i;
	
    if (m == 0) 
	{ /* 当m为0时,得到一个划分,将分解结果输出 */
        printf("%d", d[0]);
        for (i=1; i<k; i++)
            printf("+%d", d[i]);
        for (i=1; i< k; i++) /* for + if 处理输出格式 */
            if (d[i] != 1)
                break;
		if (i == k) 
			printf("\n");
		else
			printf(", ");
		return;
    }
    for (i=(m<n?m:n); i>0; i--) 
	{ /* 一次分解的几种可能分法 */
        if (i < n)
            d[k] = i;
        else
            d[k] = n;
        decompose(m-d[k], d[k], k+1); /* 递归调用使分解继续下去,直到得到一个划分 */
    }
}

求出划分个数:


#include <stdio.h>

int split(int n,int m);

int main()
{
	int n;
	printf("Please input an integer:\n");
	scanf("%d",&n);
	int sum=split(n,n);
	printf("%d\n",sum);
	return 0;
}
int split(int n,int m)
{
	if (1==n || 1==m)
	{
		return 1;
	}
	if (n==m)
	{
		return 1+split(n,m-1);
	}
	if (m>n)
	{
		split(n,n);
	}
	else
	{
		return split(n,m-1)+split(n-m,m);
	}
}

更多了解,可以点击:

http://baike.baidu.com/view/4491942.htm

http://www.programfan.com/acm/show.asp?qid=57

目录
相关文章
|
7月前
|
Python
每日一题 1447. 最简分数
每日一题 1447. 最简分数
|
8月前
每日一题——移动零
每日一题——移动零
|
算法 C语言 C++
LeetCode 每日一题2347. 最好的扑克手牌
给你一个整数数组 ranks 和一个字符数组 suit 。你有 5 张扑克牌,第 i 张牌大小
91 0
|
机器学习/深度学习 存储 人工智能
AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)
AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)
AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)
|
机器学习/深度学习 存储 容器
AcWing - 蓝桥杯集训每日一题(DAY 6——DAY 10)
一个二叉树,树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。
AcWing - 蓝桥杯集训每日一题(DAY 6——DAY 10)
|
存储 人工智能 算法
AcWing - 寒假每日一题2023(DAY 6——DAY 10)
AcWing - 寒假每日一题2023(DAY 6——DAY 10)
|
机器学习/深度学习 测试技术
AcWing - 寒假每日一题2023(DAY 16——DAY 20)
AcWing - 寒假每日一题2023(DAY 16——DAY 20)
|
人工智能 Java C++
AcWing - 寒假每日一题2023(DAY 1——DAY 5)
AcWing - 寒假每日一题2023(DAY 1——DAY 5)
每日一题——后继者
每日一题——后继者
90 0
每日一题——后继者

热门文章

最新文章