整数拆分问题,拆分这一点都会,就是怎么去输出这个他是最高数位,又或者说如果要输出固定数位的那一个结果。
最长的数位好像就是第一个符合要求的连续因子,下面是我的一个实现,供参考:
#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;
}