整数划分算法(代码)

来源:互联网 发布:20后网络数字用语 编辑:程序博客网 时间:2024/06/07 04:10
#include <stdio.h>#include <stdlib.h>#include <string.h>/*输入n(1-10之间数字),将数字分解显示,  如6可以显示为6,5+1,4+2,4+1+1..... *///计算划分种数int divideNumber(int n,int m){    if(m==1 || n==1)        return 1;    if(n<m)        return divideNumber(n,n);    else if(n==m)        return divideNumber(n,m-1)+1;    else        return divideNumber(n-m,m)+divideNumber(n,m-1);}//输出划分结果void divide(char *s,int first,int other){    int i;    static char t[50];    //保存上一次的输出结果    char temp[50],str[3]={0};    if(other==0)    {        if(s[0]==t[0])            printf(",%s",s);        else            printf("%s",s);        strcpy(t,s);    }    for(i=other;i>=1;i--)    {        if(i>first)            continue;        strcpy(temp,s);        str[0]='+';        str[1]=i+'0';        strcat(s,str);        divide(s,i,other-i);        strcpy(s,temp);    }}void main(){    int i;    int n;    char s[50]={0};    char str[3]={0};    printf("请输入要划分的数:\n");    scanf("%d",&n);    printf("划分种数:%d\n",divideNumber(n,n));    for(i=n;i>=1;i--)    {        if(i==n)            printf("%d",n);        else        {            s[0]=0;            str[0]='0'+i;            strcat(s,str);            divide(s,i,n-i);        }        puts("");    }    return 0;}
0 0
原创粉丝点击