dynamic.c

来自「自己做的常用库和实现的数据结构。public domain.」· C语言 代码 · 共 88 行

C
88
字号
/* Demo of simple dynamic programming algorithm. * * Written by Cyril Hu (cyrilhu@gmail.com), public domain. */#include<stdio.h>#include<stdlib.h>#define MAX 1024static void dynamic_with_order(int x[], int n);static void dynamic_no_order(int x[], int n);static void print(int x[], int n, int method, int digits);static int ascending_order(int x[], int digits);int main(void){	int n, x[MAX];	do {		printf("Inputer a integer, between 2 & %d\n", MAX);		scanf("%d", &n);	} while(n<2 || n>MAX);	dynamic_no_order(x, n);	dynamic_with_order(x, n);	return EXIT_SUCCESS;}static void dynamic_with_order(int x[], int n){	int digits, init, method=0, cycle;	puts("Simple dynamic allocation with keyword ordered");	for(digits=2; digits <= n; digits++) {		for(init=1; init<digits; init++)			x[init] = 1;		x[digits] = n - init + 1;		method++;		print(x, n, method, digits);		for(cycle = digits - 1; cycle > 0; cycle--) 			while(x[cycle] < x[cycle+1]) {				x[cycle]++;				x[cycle+1]--;				if(ascending_order(x, digits)) {					method++;					print(x, n, method, digits);									}			}	}}static void dynamic_no_order(int x[], int n){	int digits, init, method=0, cycle;	puts("Simple dynamic allocation without keyword ordered");	for(digits=2; digits <= n; digits++) {		for(init=1; init<digits; init++)			x[init] = 1;		x[digits] = n - init + 1;		method++;		print(x, n, method, digits);		for(cycle = digits - 1; cycle > 0; cycle--) 			while(x[cycle+1] > 1) {				x[cycle]++;				x[cycle+1]--;				method++;				print(x, n, method, digits);			}	}}static void print(int x[], int n, int method, int digits){	int i;	printf("%d %d=", method, n);	for(i=1; i<digits; i++)		printf("%d+", x[i]);	printf("%d\n", x[digits]);}static int ascending_order(int x[], int digits){	int i;	for(i=1; i<digits; i++)		if(x[i] > x[i+1])			return 0;	return 1;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?