正在加载图片...
方法一:算法的基本思路是 ①设置一个数组a[1.m用于存放某种组合各位上的数字,第一种组合为123…m. ②把最末位(第m位)逐次加1,如果达到n,退至第m1位,如果第m1位上的数已 达到其最大值n-1,再退到第m-2位,如此继续。 ③一般地,将当前处理的第t位(t<m)数字a[t]在原值基础上加1,然后第t+1位至 第m位上的数字变成: a[t]+1,a[t]+2,…,a[t]+m-1 ④返回②,直到每位均以达到各自的最大值为止 #include <stdio. h> #definen 10 #define m 6 int out(int a) int l,t for(i=1: i <=M, i++) printf( %3d", ali]) printf("\n") return t int main nt a[M+l],k,t for(k =1: k <=M: k++)alk= k if(a[t]= N-M+t)--t se a[t]++ if(t M for(k=t+1;k<=M;k++)a[k]=a[k-1]+1 out Fwhile(t!=0) 方法 #include <stdio. h> #define m 500 int num10 1 2 5 1 2 6 1 3 4 1 3 5 ┆ 4 5 6 方法一:算法的基本思路是: ①设置一个数组 a[1..m]用于存放某种组合各位上的数字,第一种组合为 123…m. ②把最末位(第 m 位)逐次加 1,如果达到 n,退至第 m-1 位,如果第 m-1 位上的数已 达到其最大值 n-1,再退到第 m-2 位,如此继续。 ③一般地,将当前处理的第 t 位(t<m)数字 a[t]在原值基础上加 1,然后第 t+1 位至 第 m 位上的数字变成: a[t]+1, a[t]+2, …, a[t]+m-1 ④返回②,直到每位均以达到各自的最大值为止。 #include <stdio.h> #define N 10 #define M 6 int out(int a[]) { int i,t; for(i = 1;i <= M,i++) printf("%3d",a[i]); printf("\n"); t = M; return t; } int main() { int a[M+1],k,t; for(k = 1;k <= M;k++) a[k] = k; Out; do{ if(a[t] == N-M+t) –-t; else{ a[t]++; if(t < M) for(k = t+1;k <= M;k++) a[k] = a[k-1]+1; out; } }while(t!=0); } 方法二: #include <stdio.h> #define M 500 int num[M],m,n;
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有