整数拆分问题,但是怎么输出这个数位最多。

整数拆分问题,拆分这一点都会,就是怎么去输出这个他是最高数位,又或者说如果要输出固定数位的那一个结果。

img

最长的数位好像就是第一个符合要求的连续因子,下面是我的一个实现,供参考:

#include <stdio.h>
#include <stdlib.h>
int main(void){
    
    int x;
    scanf("%d",&x);
//    printf("x=%d\n",x);
    int num[100][1000]={0}; //存放多组可分解的因子序列,这里不知道设置为多少好,我是设置为100 
    
    int i,j,sum;
    int t;
    int index=0;
    int n=0;
    int get=0;
    //计算可分解的因子序列,并存入数组 
    for(i=1;i<x;i++){
        sum=0;
        index=0;
        
        for(j=i;j<x;j++){
            
            sum+=j;
            num[n][index]=j;                        
            if(sum==x){                
                
                index=0;
                get=1;    
            
//                    for(int p=0;p<1000;p++){
//                        if(num[n][p]!=0){
//                            printf("%d ",num[n][p]);
//                        }
//                                    
//                    }
//                    printf("\n");
                n++;            
            }else{
                index++;
            }            
        }
    
        
        if(get==0){ //如果当前序列不符合要求,则从数组中剔除 
            for(t=0;t<index;t++){
                num[n][t]=0;
            }
        }
        get=0;
        
    }
    
//    printf("n=%d\n",n);
    int length=0;
    int h=0;
    int * result = (int *) malloc(sizeof(int)*n);
    //打印所有可分解的因子序列,并计算每一组的长度,然后把这个长度存入数组 
    if(n>0){
        for(i=0;i<n;i++){
            h=0;
            length=0;
            for(j=0;j<1000;j++){
                
                if(num[i][j]!=0){
                    length++;
                    printf("%d ",num[i][j]);
                }
            }
            printf("\n");
            result[h]=length;
            h++;
        }
    } 
    
    
//    for(i=0;i<h;i++){
//        printf("%d ",result[i]);
//    }
//    printf("\n");

    //计算最长的因子序列为第几项 
    int maxLongIndex=0;
    for(i=0;i<h;i++){
        
        if(maxLongIndex<result[i]){
            maxLongIndex=i;
        }
    }
//    printf("maxLongIndex=%d\n",maxLongIndex); 
    
    if(h>0){
            //打印最长的连续因子序列 
        printf("%d最长可分解为:",x);
        for(i=0;i<1000;i++){
            if(num[maxLongIndex][i]!=0){
                printf("%d ",num[maxLongIndex][i]);
            }
        }
    }else{
        printf("No Answer");
    }
    
    
    return 0;
} 

img