- UID
- 1821
- 精华
- 积分
- 3295
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
发表于 2017-7-5 05:52:40
|
显示全部楼层
本帖最后由 Ayala 于 2017-7-5 08:14 编辑
- //
- int tab_A[10]={0,122*1,122*2,122*3,122*4,122*5,122*6,122*7,122*8,122*9};
- int tab_B[10]={0,212*1,212*2,212*3,212*4,212*5,212*6,212*7,212*8,212*9};
- int tab_C[10]={0,221*1,221*2,221*3,221*4,221*5,221*6,221*7,221*8,221*9};
- //
- void foo(int tag)
- {
- int c,b,a,t;
- for (c=0,t=(tag&1)?1:2;c<10;c+=t)// c与tag奇偶性相同 10/t次加法 10/t次比较(减法)
- {
- for (b=0;b<10;b++)//10/t*10次加法 10/t*10次比较(减法)
- {
- for (a=0;a<10;a++)//10/t*10*10次加法 10/t*10*10次比较(减法)
- {
- //10/t*10*10*3次加法 10/t*10*10*3次比较(减法) 10/t*10*10*3次查找数据
- if (tag == tab_A[a] + tab_B[b] + tab_C[c])
- {
- printf("a=%d\nb=%d\nc=%d\n",a,b,c);
- //goto done;
- }
- }
- }
- }
- done:
- return;
- }
- //看起来循环次数很少 但是因为做了除法实际运行时间会比上一个更长
- void foo2(tag)
- {
- int c,b,a,t;
- for (c=0,t=(tag&1)?1:2;c<10;c+=t)// c与tag奇偶性相同 10/t次加法 10/t次比较(减法)
- {
- for (b=0;b<10;b++)//10/t*10次加法 10/t*10次比较(减法)
- {
- //10/t*10次除法
- if (0 == (tag - tab_B[b] - tab_C[c]) % 122)
- {
- a = (tag - tab_B[b] - tab_C[c]) / 122;
- printf("a=%d\nb=%d\nc=%d\n",a,b,c);
- //goto done;
- }
- }
- }
- done:
- return;
- }
- //没通用性的算法3 循环次数更少 但是更不可取 因为花了大量时间去做了不等式证明
- void foo3()
- /*
- 122*a+212*b+221*c=2012
- 0<=a<=9 ==> 0 <= 122*a <= 122*9=1098
- 0<=b<=9 ==> 0 <= 212*b <= 212*9=1908
- 0<=c<=9 ==> 0 <= 221*c <= 221*9=1989
-
- 122*a=2012 - (212*b + 221*c)
-
- 0<=2012 - (212*b + 221*c)<=1098
- 212*b + 221*c >=2012 - 1098 = 914
- 212*b + 212*c + 9*c >=914
-
- 212*b + 212*c >=914-9*9=833
-
- b + c >= 833/212
- b + c >= 4
-
- a = (2012-(212*b+221*c))/122 = 2012/122 - (212*b/122+221*c/122)
- 16.4 < 2012/122 < 16.5
-
- 16.5 > 212*b/122+221*c/122 >1.73*b + 1.81*c > 4*1.73=6.92
-
- 16.5 / 1.73 < 9.54
- b+1.046*c <9.54
-
- 0 <=0.046*c <=0.046*9=0.414
- b+c <=9
- */
- {
- int c,b,a;
- for (c=0;c<10;c+=2)
- {
- for (b=(c<=4)?(4-c):0;b+c<=9;b++)
- {
- if (0 == (2012 - tab_B[b] - tab_C[c]) % 122)
- {
- a = (2012 - tab_B[b] - tab_C[c]) / 122;
- printf("a=%d\nb=%d\nc=%d\n",a,b,c);
- //goto done;
- }
- }
- }
- done:
- return;
- }
- int main()
- {
- foo(2012);
- foo2(2012);
- foo3();
- system("pause");
- }
复制代码 |
|