求m个数之和等于n的C语言程序
输入两个整数m,n,编写程序求出所有n个数之和等于m,例如输入m=3,n=2.编写程序要求输出:
3=0+3;
3=1+2;
3=2+1;
3=3+0;
[解决办法]
#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;}
[解决办法]
#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);}
[解决办法]
#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);}