11:26:13将一个自然数拆成几个连续的整数的和,比如15可以拆成如下形式 15 7 + 8 4 + 5 + 6 1 + 2 + 3 + 4 + 5 代码如下 #include <stdio.h> void chain (int n) { int start, i, j, k; printf ("%d/n/n", n); start = 1; while (start < n) { for ( i = start + 1; i < n && n % i; ++i) ; if (i <= n) { if (i % 2) { if (n / i - i / 2 > 0) { for (j = n / i - i / 2; j <= n / i + i / 2; ++j) printf ("%d ", j); printf ("/n/n"); } else if (i / 2 - n / i + 1 > 0 && (n / i) % 2 ) { for (j = i / 2 - n / i + 1; j <= i / 2 + n / i; ++j) printf ("%d ", j); printf ("/n/n"); } } else if ( (n / i) % 2) { k = n / i; if ( k / 2 - i + 1 > 0) { printf ("--------- %d ---------/n", i); for (j = k / 2 - i + 1; j > 0 && j <= k / 2 + i; ++j) printf ("%d ", j); printf ("/n/n"); } } } start = i; } } int main (int argc, char **argv) { int n; scanf ("%d", &n); chain (n); return 0; } 方法二 #include <stdio.h> #include <math.h> int chain (int n) { int i, t, w, k; for (t = 0; t <= 2 * n - 1; ++t) { w = (2 * t + 1) * (2 * t + 1) + 8 * n; k = (int) sqrt(w); if (k * k != w) continue; else if( k % 2 == 0) continue; else { for (i = 1; i <= (k - 2 * t - 1) / 2; ++i) printf ("%d ", (t + i)); printf ("/n/n"); } } } int main (int arc, char **argv) { int n; printf ("Please input a number:"); scanf ("%d", &n); chain (n); return 0; }