如何产生这个数字序列?
变量 X=1
如何产生以下序列?(使X按序列值变化)
+1, 0, -1, 0, +1, 0, -1, 0, +1, ……
不要For循环, 越简单直接越好。可引入辅助整形变量a,b,c,比如这类形式:
a=-1
X=X+a^X
PS:这个问题是《组合数学》学科研究范围吗?
回复 1# proof
不要For循环, 越简单直接越好你这话还真矛盾 静态 整型 待选集 = {1,0,-1};
内联 整型 检索序列(无符号 整型 索引) {返 待选集[索引%3];} y = (2-(x+1)%4)%2
#include <stdio.h>
int main( void )
{
for( int x=0; x<20; ++x )
printf( "%+d\n", (2-(x+1)%4)%2 );
return 0;
} 本帖最后由 proof 于 2016-11-24 15:12 编辑
索引法:待选集 = {1,0,-1};
通项公式法:y = (2-(x+1)%4)%2
感谢各位。
本帖最后由 hellioncu 于 2016-11-23 10:59 编辑
struct foo
{
unsigned int s:2;
unsigned int v:1;
};
int bar(struct foo *p)
{
p->s--; p->v--;
return p->s == 3 ? -1 : p->v ;
}
int main()
{
struct foo f;
f.s = 2; f.v=0;
printf("%d\n", bar(&f));
printf("%d\n", bar(&f));
printf("%d\n", bar(&f));
printf("%d\n", bar(&f));
printf("%d\n", bar(&f));
printf("%d\n", bar(&f));
printf("%d\n", bar(&f));
printf("%d\n", bar(&f));
return 0;
}
不要For循环只能用递归了
尾递归应该是最合适的,同时看返回值和索引值。 不一定最简单,但最直接的方法:
int recursive(int n, int total)
{
if (n >= total)
return 0;
int x = n%4;
int ret = 0;
switch(x)
{
case 0:
ret = 1;
break;
case 1:
ret = 0;
break;
case 2:
ret = -1;
break;
case 3:
ret = 0;
break;
}
printf("%d", ret);
return recursive(n+1, total);
}
main()
{
recursive(0, 1024);
} 感谢大家。:victory:
页:
[1]