首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求m个数之和即是n的C语言程序

2012-11-10 
求m个数之和等于n的C语言程序输入两个整数m,n,编写程序求出所有n个数之和等于m,例如输入m3,n2.编写程序

求m个数之和等于n的C语言程序
输入两个整数m,n,编写程序求出所有n个数之和等于m,例如输入m=3,n=2.编写程序要求输出:
3=0+3;
3=1+2;
3=2+1;
3=3+0;

[解决办法]

C/C++ code
#include <stdio.h>#include <stdlib.h>struct _Data{    unsigned int TotalVal;    unsigned int* value;    unsigned int number;}Data;void print(){    printf("%d = %d", Data.TotalVal, Data.value[0]);    for (unsigned int i=1; i<Data.number; i++)    {        printf(" + %d", Data.value[i]);    }    printf("\r\n");}void GetValue(unsigned int value, unsigned int num){    if (num == 1)    {        Data.value[0] = value;        print();    }    else    {        for (unsigned int i=0; i<=value; i++)        {            Data.value[num-1] = i;            GetValue(value - i, num-1);        }    }}int main(int argc, char* argv[]){    printf("输入两个整数:");    scanf("%d%d", &Data.TotalVal, &Data.number);    Data.value = (unsigned int *)malloc( Data.number * sizeof(unsigned int) );    GetValue(Data.TotalVal, Data.number);    free(Data.value);    return 0;}
[解决办法]
C/C++ code
#include<iostream>#include<stdlib.h>using namespace std;int main(){    int *a,m=-1,n=-1,rest,cur=0;    register int i;    do    {        cout<<"m=";        cin>>m;    }while(m<0);    do    {        cout<<"n=";        cin>>n;    }while(n<=0);    cout<<"Results:"<<endl;    if(n>1)    {        rest=m;        a=new int[--n];        for(i=0;i<n;i++)            a[i]=0;        while(a[0]<=m)        {            if(cur==n)            {                cout<<m<<'=';                for(i=0;i<n;i++)                    cout<<a[i]<<'+';                cout<<rest<<endl;                rest+=a[--cur]++;            }            else                if(a[cur]<=rest)                    rest-=a[cur++];                else                {                    a[cur--]=0;                    rest+=a[cur]++;                }        }        delete a;    }    else        cout<<m<<'='<<m<<endl;    system("pause");    return(0);}
[解决办法]
C/C++ code
#include<iostream>#include<stdlib.h>//----------------------------------// n个非负整数,和为m的全排列//----------------------------------using namespace std;int main(){    int *a,m=-1,n=-1,rest,cur=0;    register int i;    do    {        cout<<"m=";        cin>>m;        rewind(stdin);    }while(m<0);    do    {        cout<<"n=";        cin>>n;        rewind(stdin);    }while(n<=0);    cout<<"Results:"<<endl;    if(n>1)    {        rest=m;        a=new int[--n];        for(i=0;i<n;i++)            a[i]=0;        while(a[0]<=m)        {            if(cur==n)            {                cout<<m<<'=';                for(i=0;i<n;i++)                    cout<<a[i]<<'+';                cout<<rest<<endl;                rest+=a[--cur]++;            }            else                if(a[cur]<=rest)                    rest-=a[cur++];                else                {                    a[cur--]=0;                    rest+=a[cur]++;                }        }        delete a;    }    else        cout<<m<<'='<<m<<endl;    system("pause");    return(0);} 

热点排行