gpt4 book ai didi

c - 如何打印编号给定整数可以用不同数字的总和来表示的方式?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:03:31 25 4
gpt4 key购买 nike

假设我有一个数字 5,现在表示 5 的可能组合是:

4 + 1

3 + 2

3 + 1 + 1

2 + 2 + 1

2 + 1 + 1 + 1

1 + 1 + 1 + 1 + 1

我们如何用 C 语言为此创建一个程序?

最佳答案

#include <stdio.h>
#include <stdlib.h>

int *LIST; /* result work list */
int LEVEL=-1;/* partition level */

void print (void){
int i;

for(i=LEVEL;i>=0;--i){
printf("%d",LIST[i]);
if(i!=0)
printf(" + ");
}
printf("\n");
}

void part(int n){
int i, first; /* first is last-1 */

if(n<1) return ;
LIST[++LEVEL]=n; /* add list tail */
print();

first=(LEVEL==0) ? 1 : LIST[LEVEL-1];

for(i=first;i<=n/2;i++){ /* candidate > first */
LIST[LEVEL]=i; /* last element replace */
part(n-i);
}
LEVEL--;
return;
}

int main(int argc, char **argv){
int N;

N=(argc>1)?atoi(argv[argc-1]):5;

LIST=(int *)calloc(N, sizeof(int));
if(LIST==NULL){
fprintf(stderr, "not enough memory\n");
return -1;
}

part(N);
free(LIST);

return 0;
}
/* result
5
4 + 1
3 + 1 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1
2 + 2 + 1
3 + 2
*/

关于c - 如何打印编号给定整数可以用不同数字的总和来表示的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11674426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com