说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何使用回溯来解这个题?(求助)

编辑:说三道四文库 发布时间:2018-07-18 08:51
HTML文档下载 WORD文档下载 PDF文档下载
将一个正整数分解为n个不等的大于一的整数的积。
要求出所有的可能。
例如:
32=2*16;
32=4*8;
32=32;
最好能写出C++的代码。
干吗要用回溯法?用别的也可以呀
用什么办法啊?
求质因子的算法我感觉可以
#include<iostream>
   #include<stdlib.h>
   #define M 100
   int a[M]={0};
   int m =0;
   int f(int k, int n,int s)
   {   
       for(int i=k; i<=n; i++)
       {   
          if(!(n%i)&&(n/i>i))  
          {  
             a[m++]=i; a[m++]= n/i;
             cout << s << "= " << a[0];
             for(int j=1; j<=m-1; j++)  
                cout << '*' << a[j];
             cout << endl;
             
             int j =i;
             while(n/i%(++j));
             
             if(n/i/j>j)
               m--;
             else 
               m = 0;
               
             f(i+1,n/i,s);
         }        
      }       
   }   
   
   int main()
   {  
      int n;
      cout << "please input the number n = "; 
      cin >> n;
      f(2,n,n);
      cout << n << "= 1*"<< n;
      system("pause");
      }
如果你不允许1出现: 可以把main里面的  
cout << n << "= 1*"<< n;     ==> cout << n << "= "<< n;

 楼主记住, 只要在纸上画画能得出规律的
 都能用计算机程序写出来: 
 我也是初学者 共同努力   @_@
谢谢∶)
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘