现在的位置: 首页 > 综合 > 正文

Algorithm(1)

2014年11月18日 ⁄ 综合 ⁄ 共 833字 ⁄ 字号 评论关闭
 

题目1:给你一个数N(2<<N<<10000), 按下面格式打印出来:
例如是10:10=9+1, 10=8+2,10=8+1+1, 10=7+3,10=7+2+1,10=7+1+1+1,。。。。

10=1+1+1+1+1+1+1+1+1+1

分析:

n=2 时,  打印出 2=1+1   记为 P(2)

n=3时,  打印出 3 =2+1 

                                3=1+2  3=1+P(2)

n=4时, 打印出 4=3+1 

                                 4=2+2   4=2+P(2)

                               4=1+3     4=1+P(3)

………………

用数组stack[]来模拟一个栈,stab来标记此次递归可以使用的栈底,

 

#include"stdio.h"
#include"stdlib.h"

#define N  6

int stack[10000];

void PrintPlus(int n, int stab)   //from stack[stab] space are available for this cursive
{
 int p = stab;
    int i,j;

 if(n < 2)
  return;
 if(n > 10000)
 {
  printf("Too big!!");
        return;
 }

 for(i=n-1; i>0; i--)
 {
  stack[p++] = i;
  stack[p] = n - i;
  printf("%d = %d", N, stack[0]);
  for(j=1; j<=p; j++)
  {
   printf(" + %d", stack[j]);
  }
  printf("/n");

  PrintPlus(stack[p], p);
  p = stab;
 }
 return;
}

int main()
{
 int n = N;
 int stab = 0;

 PrintPlus(n, stab);
 
 return 0;
}
 

【上篇】
【下篇】

抱歉!评论已关闭.