d*********6 发帖数: 1972 | 1 本人编程菜鸟,因为科研上面需要自己写一个程序,所以硬着头皮在做,用C(就是本
科学的那点基础).
有一个很简单的问题请教各位大牛,希望有一个简单的解决方法,第一个解答的有5个
包子,之后五个每人一个包子。
希望写一个循环,循环的层数N是可变的。
举个简化的例子,当N=2的时候,循环是
for(i[0]=0; i[0]<3; i[0]++)
for(i[1]=0; i[1]<3; i[1]++){
循环体,里面会用到*i的值.
}
当N=3的时候,是三层循环,循环变量分别是i[0], i[1], 1[2]。
希望把这个循环推广到任意N (N不会很大)。
谢谢大家。 |
c**t 发帖数: 2744 | 2 这得用到递归、迭代。
本人编程菜鸟,因为科研上面需要自己写一个程序,所以硬着头皮在做,用C(就是本
科学的那点基础).
有一个很简单的问题请教各位大牛,希望有一个简单的解决方法,第一个解答的有5个
包子,之后五个每人一个包子。
希望写一个循环,循环的层数N是可变的。
举个简化的例子,当N=2的时候,循环是
for(i[0]=0; i[0]<3; i[0]++)
for(i[1]=0; i[1]<3; i[1]++){
循环体,里面会用到*i的值.
}
当N=3的时候,是三层循环,循环变量分别是i[0], i[1], 1[2]。
希望把这个循环推广到任意N (N不会很大)。
谢谢大家。
【在 d*********6 的大作中提到】 : 本人编程菜鸟,因为科研上面需要自己写一个程序,所以硬着头皮在做,用C(就是本 : 科学的那点基础). : 有一个很简单的问题请教各位大牛,希望有一个简单的解决方法,第一个解答的有5个 : 包子,之后五个每人一个包子。 : 希望写一个循环,循环的层数N是可变的。 : 举个简化的例子,当N=2的时候,循环是 : for(i[0]=0; i[0]<3; i[0]++) : for(i[1]=0; i[1]<3; i[1]++){ : 循环体,里面会用到*i的值. : }
|
p******g 发帖数: 347 | 3 check out a related thing: std::next_permutation
http://www.cplusplus.com/reference/algorithm/next_permutation/
【在 d*********6 的大作中提到】 : 本人编程菜鸟,因为科研上面需要自己写一个程序,所以硬着头皮在做,用C(就是本 : 科学的那点基础). : 有一个很简单的问题请教各位大牛,希望有一个简单的解决方法,第一个解答的有5个 : 包子,之后五个每人一个包子。 : 希望写一个循环,循环的层数N是可变的。 : 举个简化的例子,当N=2的时候,循环是 : for(i[0]=0; i[0]<3; i[0]++) : for(i[1]=0; i[1]<3; i[1]++){ : 循环体,里面会用到*i的值. : }
|
d*********6 发帖数: 1972 | 4 我知道用递归,能不能说的详细点,比如下面这个递归有点问题
int N=2;
void loop(int *i, int level){
for(i[level]=0; i[level]<3; (i[level])++){
if(level==N){
printf("%d\n", i[level]);
}
else loop(i, level+1);
}
}
int main(){
int i[N];
loop(i, 0);
}
这个和我希望得到的循环结果不同,每个循环体都被运行了3次
【在 c**t 的大作中提到】 : 这得用到递归、迭代。 : : 本人编程菜鸟,因为科研上面需要自己写一个程序,所以硬着头皮在做,用C(就是本 : 科学的那点基础). : 有一个很简单的问题请教各位大牛,希望有一个简单的解决方法,第一个解答的有5个 : 包子,之后五个每人一个包子。 : 希望写一个循环,循环的层数N是可变的。 : 举个简化的例子,当N=2的时候,循环是 : for(i[0]=0; i[0]<3; i[0]++) : for(i[1]=0; i[1]<3; i[1]++){
|
X****r 发帖数: 3557 | 5 void loop(int limits[], int n, void (*func)(int x[])) {
int i, *x = (int *)malloc(n * sizeof(int));
for (i = 0; i < n; x[i++] = 0);
do {
func(x);
for (i = n-1; i >= 0 && ++x[i] >= limits[i]; x[i--] = 0);
} while (i >= 0);
free(x);
}
【在 d*********6 的大作中提到】 : 本人编程菜鸟,因为科研上面需要自己写一个程序,所以硬着头皮在做,用C(就是本 : 科学的那点基础). : 有一个很简单的问题请教各位大牛,希望有一个简单的解决方法,第一个解答的有5个 : 包子,之后五个每人一个包子。 : 希望写一个循环,循环的层数N是可变的。 : 举个简化的例子,当N=2的时候,循环是 : for(i[0]=0; i[0]<3; i[0]++) : for(i[1]=0; i[1]<3; i[1]++){ : 循环体,里面会用到*i的值. : }
|
r***t 发帖数: 21 | 6 I do not understand the question. It seems you need to execute something i[
0]*i[1]*.... times. |
H****r 发帖数: 2801 | 7 Xentar大师这个写的太老辣了,不服不行啊!
【在 X****r 的大作中提到】 : void loop(int limits[], int n, void (*func)(int x[])) { : int i, *x = (int *)malloc(n * sizeof(int)); : for (i = 0; i < n; x[i++] = 0); : do { : func(x); : for (i = n-1; i >= 0 && ++x[i] >= limits[i]; x[i--] = 0); : } while (i >= 0); : free(x); : }
|
d*********6 发帖数: 1972 | 8 是啊 太牛了 越看越佩服!包子已发 谢谢大家
【在 H****r 的大作中提到】 : Xentar大师这个写的太老辣了,不服不行啊!
|
L***n 发帖数: 6727 | 9 beautiful code, co 佩服
【在 H****r 的大作中提到】 : Xentar大师这个写的太老辣了,不服不行啊!
|
l*********s 发帖数: 5409 | 10 Re!
【在 L***n 的大作中提到】 : beautiful code, co 佩服
|
|
|
b***i 发帖数: 3043 | 11 你的目的是什么?遍历?排列?
【在 d*********6 的大作中提到】 : 本人编程菜鸟,因为科研上面需要自己写一个程序,所以硬着头皮在做,用C(就是本 : 科学的那点基础). : 有一个很简单的问题请教各位大牛,希望有一个简单的解决方法,第一个解答的有5个 : 包子,之后五个每人一个包子。 : 希望写一个循环,循环的层数N是可变的。 : 举个简化的例子,当N=2的时候,循环是 : for(i[0]=0; i[0]<3; i[0]++) : for(i[1]=0; i[1]<3; i[1]++){ : 循环体,里面会用到*i的值. : }
|
L***n 发帖数: 6727 | 12 目的是变量循环重数吧,当年学BASIC的标准练习之一啊
在 bihai (学得不好) 的大作中提到: 】 |
d****n 发帖数: 1637 | 13 递归的
#include
#include
void print_a(int a[], int n){
int i;
for(i=0;i
printf("%d ", a[i]);
}
printf("\n");
}
void loop(int a[], int n, int N ){
if(n==0){print_a(a, N) ;return;}
int i;
for(i=0;i
a[n-1]=i;
loop(a, n-1, N);
}
}
int main(){
int N=6;
int a[N] ;
loop( a, N, N);
}
【在 d*********6 的大作中提到】 : 我知道用递归,能不能说的详细点,比如下面这个递归有点问题 : int N=2; : void loop(int *i, int level){ : for(i[level]=0; i[level]<3; (i[level])++){ : if(level==N){ : printf("%d\n", i[level]); : } : else loop(i, level+1); : } : }
|
d****n 发帖数: 1637 | 14 你这个是all permutation 吧?
楼主的好像就是 enumerating
没看懂 limit[]是什么,赐教。给个driver
【在 X****r 的大作中提到】 : void loop(int limits[], int n, void (*func)(int x[])) { : int i, *x = (int *)malloc(n * sizeof(int)); : for (i = 0; i < n; x[i++] = 0); : do { : func(x); : for (i = n-1; i >= 0 && ++x[i] >= limits[i]; x[i--] = 0); : } while (i >= 0); : free(x); : }
|
l******a 发帖数: 14 | 15 每一层循环可以不都是3,而是limit[]数组中的值。
写的太好了。赞一个。
你这个是all permutation 吧?楼主的好像就是 enumerating没看
懂 limit[]是什么,赐教。给个driver
★ Sent from iPhone App: iReader Mitbbs 7.56 - iPad Lite
【在 d****n 的大作中提到】 : 你这个是all permutation 吧? : 楼主的好像就是 enumerating : 没看懂 limit[]是什么,赐教。给个driver
|
d****n 发帖数: 1637 | 16 还是不太明白楼主的specification 和大牛的implementation是不是很match
【在 l******a 的大作中提到】 : 每一层循环可以不都是3,而是limit[]数组中的值。 : 写的太好了。赞一个。 : : 你这个是all permutation 吧?楼主的好像就是 enumerating没看 : 懂 limit[]是什么,赐教。给个driver : ★ Sent from iPhone App: iReader Mitbbs 7.56 - iPad Lite
|
t****t 发帖数: 6806 | 17 This has been discussed once last year.
http://www.mitbbs.com/article_t1/Programming/31180587_31180631_
【在 d****n 的大作中提到】 : 还是不太明白楼主的specification 和大牛的implementation是不是很match
|
n******t 发帖数: 4406 | 18 这种事情常常要问问自己为什么需要干这件事.
【在 d*********6 的大作中提到】 : 本人编程菜鸟,因为科研上面需要自己写一个程序,所以硬着头皮在做,用C(就是本 : 科学的那点基础). : 有一个很简单的问题请教各位大牛,希望有一个简单的解决方法,第一个解答的有5个 : 包子,之后五个每人一个包子。 : 希望写一个循环,循环的层数N是可变的。 : 举个简化的例子,当N=2的时候,循环是 : for(i[0]=0; i[0]<3; i[0]++) : for(i[1]=0; i[1]<3; i[1]++){ : 循环体,里面会用到*i的值. : }
|
t****t 发帖数: 6806 | 19 这个倒还算是常用的.
【在 n******t 的大作中提到】 : 这种事情常常要问问自己为什么需要干这件事.
|
n******t 发帖数: 4406 | 20 我的意思是,如果不想成多重循环,而是意识到无非就是遍历一个笛卡尔积的话,自然就知
道怎么写了.
【在 t****t 的大作中提到】 : 这个倒还算是常用的.
|