C++满足特异条件的数列

2014-11-01 17:00:09 · 作者: · 浏览: 77

  当前位置:首页>挖经验>题库中心>C/C++语言程序百例>97.满足特异条件的数列


  97.满足特异条件的数列作者:不详 来源:互联网  酷勤网收集 2008-04-24


  摘要


  酷勤网  例如:当n=4, m=8时,将得到如下5 个数列:5 1 1 1 4 2 1 1 3 3 1 1 3 2 2 1 2 2 2 2 按照条件使前一个元素的值一定大于等于当前元素的值,不断地向前推就可以解决问题。下面的程序允许用户选定M和N,输出满足条件的所有数列。


  输入m和n(20>=m>=n>0)求出满足以下方程的正整数数列 i1,i2,...,in,使得:i1+i1+...+in=m,且i1>=i2...>=in。例如:


  当n=4, m=8时,将得到如下5 个数列:


  5 1 1 1 4 2 1 1 3 3 1 1 3 2 2 1 2 2 2 2


  *问题分析与算法设计


  可将原题抽象为:将M分解为N个整数,且N个整数的和为M,i1>=i2>=...>=in。分解整数的方法很低多,由于题目中有"i1>=i2>=.....>=in,提示我们可先确定最右边in元素的值为1,然后按照条件使前一个元素的值一定大于等于当前元素的值,不断地向前推就可以解决问题。下面的程序允许用户选定M和N,输出满足条件的所有数列。


  *程序说明与注释


  #include


  #define NUM 10 /*允许分解的最大元素数量*/


  int i[NUM]; /*记录分解出的数值的数组*/


  int main()


  {


  int sum,n,total,k,flag,count=0;


  printf("Please enter requried terms(<=10):");


  scanf("%d",&n);


  printf(" their sum:");


  scanf("%d",&total);


  sum=0; /*当前从后向前k个元素的和*/


  k=n; /*从后向前正在处理的元素下标*/


  i[n]=1; /*将最后一个元素的值置为1作为初始值*/


  printf("There are following possible series:\n");