- UID
- 1821
- 精华
- 6
- 积分
- 1622
- 威望
- 67 点
- 宅币
- 1291 个
- 贡献
- 53 次
- 宅之契约
- 0 份
- 最后登录
- 2019-10-20
- 在线时间
- 258 小时
用户组: 版主
- UID
- 1821
- 精华
- 6
- 威望
- 67 点
- 宅币
- 1291 个
- 贡献
- 53 次
- 宅之契约
- 0 份
- 在线时间
- 258 小时
- 注册时间
- 2016-7-12
|
发表于 2017-7-5 05:52:40
|
显示全部楼层
本帖最后由 Ayala 于 2017-7-5 08:14 编辑
[mw_shl_code=c,true]//
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 + 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 - tab_C[c]) % 122)
{
a = (tag - tab_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 - tab_C[c]) % 122)
{
a = (2012 - tab_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");
}
[/mw_shl_code] |
|