移动窗口法的衍生
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
typedef struct Node_{
int len;
int *next;
}Node;
Node *node;
Node* Initial(int target){
int n=sqrt(2*target);
Node *node=(Node*)calloc(n,sizeof(Node));
return node;
}
int * returnColum(int start,int end){//end<start
int *arry=(int*)calloc(start-end+1,sizeof(int));
int i=0;
int len=start-end+1;
for(int i=0;i<len;i++)
{
arry[i]=end++;
}
for(int i=0;i<2;i++)
return arry;
}
Node* getcloum(int target,int *returnSize){
int start=(target+1)/2;
int end=start;
int sum=0;
int N=0;
int m=0;
while(end>0)
{
N=start-end+1;
sum=N*end+(N-1)*N/2;
if(sum==target)
{
(*returnSize)++;
node[m].len=start-end+1;
int *p=returnColum(start,end);
node[m].next=p;
m++;
start--;
end=end-2;
}
else if(sum<target) end--;
else
{
start--;
end--;
}
}
return node;
}
int main(){
int target=40;
int returnSize=0;
node=Initial(target);
getcloum(target,&returnSize);
for(int i=returnSize;i>-1;i--)
{
int *p=node[i].next;
for(int j=0;j<node[i].len;j++)
{
printf("%d ",*p);
p++;
}
printf("\n");
}
return 0;
}
来源:CSDN
作者:two_apples
链接:https://blog.csdn.net/two_apples/article/details/104704050