您的位置:首页 > 其它

整数拆分 算法。

2015-12-23 01:28 197 查看
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

#include <stdlib.h>

#include "stdio.h"

#define N 8

main(){
int i,j,s,sum;

    int a
;

    int x;
long k=0;
x=2;

printf("%d=%d",N,N);   //把独物的一种情况独立展示出来
//穷举法 计算
while(1){
k++;                  //通过K统计N个数组成的个数
if(k==s*N) break;     //k超过统计的个数退出循环
s=1;                  //S来计算对应位的权
a[0]=k%N;             //第1位的值
sum=a[0];             //通过sum累加,后面要与N做比较
if(a[0]==0) continue; //凡是位数上有0的跳过
for(i=1;i<N-1;i++)    //通过循环第k种情况个其他位置的值应当是多少
{s*=N;                //统计对应的权
a[i]=k/s%N;          //计算第i位置的值
if(a[i]==0) break;   //凡是位数上有0的跳过,注break这里是直接结束for循环进入while

     sum+=a[i];           //累计a[i]的和
if (sum>N) continue; //如果累计的值超过N不必再继续后面。
if (i==x) x++;       //x代表通计数字组成的个数且只能累增,后面少于组成个数就可以被筛选掉

                        // 如果组成的个数开始累增1了,x就做一下标识
if (i+1<x) continue; // 如果组成个数小于当前x则不必再继续后面。
if (sum==N) {        //如果sum与N一直,则输出结果

    printf("=");
for(j=0;j<i;j++)

         printf("%d+",a[j]);

         printf("%d",a[j]);
}
}
}

printf("=");  //独特的另一种情况展示出来

for(i=0;i<N-1;i++) 

printf("1+");

printf("1\n");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: