⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 整数划分.txt

📁 数值分析里的
💻 TXT
字号:
#include "iostream.h"
  int q( int n , int m )
  {
  if( n < 1 || m < 1 )
   return 0;
  if( n == 1 || m == 1 )
   return 1;
  if( n < m )
   return q( n , n );
  if( n == m )
   return q( n , m - 1 ) + 1;
  return q( n , m - 1 ) + q( n - m , m );
  }
  void main()
  {
  cout<<q(6,6)<<endl;
  }
  

  #include "iostream.h"
  #include "iomanip.h"
  #define max 1024
  void print( int *map , int len )
  {
  static int total = 1;
  cout<<"划分"<<setw(4)<<total++<<" : ";
  for( int i = 0 ; i < len ; i++ )
   cout<<setw(5)<<map[i];
  cout<<endl;
  }
  int p( int n , int m , int *map , int len )
  {
  if( n >= 1 && m == 1 )
  {
  
   map[len] = 1;
   p( n - 1 , m , map , len+1 );
   return 1;
  }
  else if( n == 0 && m == 1 )
  {
  
   print( map , len );
   return 1;
  }
  else if( n == 1 && m > 1 )
  {
  
   map[len] = n;
   print( map , len + 1 );
   return 1;
  }
  else if( n < m )
  {
 
   return p( n , n , map , len );
  }
  else if( n == m )
  {
  
   map[len] = m;
   print( map , len + 1 );
  
   return p( n , m - 1 , map , len ) + 1;
  }
  else
  {
  
   map[len] = m;
   int s1 = p( n - m , m , map , len + 1 );
  
   int s2 = p( n , m - 1 , map , len );
   return s1 + s2;
  }
  }
  void main()
  {
  int map[max] = { 0 };
  int len = 0;
  cout<<"total="<<p( 6 , 6 , map , len )<<endl;
  }







#include "iostream.h"
  int q( int n , int m )
  {
  if( n < 1 || m < 1 )
   return 0;
  if( n == 1 || m == 1 )
   return 1;
  if( n < m )
   return q( n , n );
  if( n == m )
   return q( n , m - 1 ) + 1;
  return q( n , m - 1 ) + q( n - m , m );
  }
  void main()
  {
  cout<<q(6,6)<<endl;
  }
  ////////////////////////////////////////
  ////////////////////////////////////////
  ////////////////////////////////////////
  ////////////////////////////////////////
  ////////////////////////////////////////
  // 求划分
  // 
  #include "iostream.h"
  #include "iomanip.h"
  #define max 1024
  void print( int *map , int len )
  {
  static int total = 1;
  cout<<"划分"<<setw(4)<<total++<<" : ";
  for( int i = 0 ; i < len ; i++ )
   cout<<setw(5)<<map[i];
  cout<<endl;
  }
  int p( int n , int m , int *map , int len )
  {
  if( n >= 1 && m == 1 )
  {
  // flag1:
  // 当 m=1 时,只有一种分法,n = 1 + 1 + ... 
  // 与 flag2 合作,可以完成这种分解的输出
   map[len] = 1;
   p( n - 1 , m , map , len+1 );
   return 1;
  }
  else if( n == 0 && m == 1 )
  {
  // flag2:
  // 配合 flag1 ,完成对 m=1 划分的处理
   print( map , len );
   return 1;
  }
  else if( n == 1 && m > 1 )
  {
  // flag3:
  // 当 n=1 时,分解已经完成,进行输出处理
   map[len] = n;
   print( map , len + 1 );
   return 1;
  }
  else if( n < m )
  {
  // flag4:
  // 由于所处位置的关系,此时及以下情况中的 m , n 都 > 1
   return p( n , n , map , len );
  }
  else if( n == m )
  {
  // flag5:
  // 这种情况下,map 位赋为 m,则可完成一种划分
   map[len] = m;
   print( map , len + 1 );
  // 继续下种情况的处理
   return p( n , m - 1 , map , len ) + 1;
  }
  else
  {
  // 有两种处理方法
  // 方法一:
  // 当前 map 位赋为 m , 处理 p( n-m , m )
   map[len] = m;
   int s1 = p( n - m , m , map , len + 1 );
  // 方法二:
   int s2 = p( n , m - 1 , map , len );
   return s1 + s2;
  }
  }
  void main()
  {
  int map[max] = { 0 };
  int len = 0;
  cout<<"total="<<p( 6 , 6 , map , len )<<endl;
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -