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 + -
显示快捷键?