[存档!]纯数学、物理学、化学等:与贸易没有任何关系的大脑训练问题 - 页 511

 

MaxZ:

我理解这些变化。只是我还没有搞清楚。

   for(int i=5;i>-1;i--)
     {
      XX|=int(1<<A[i]);
     }
   if(XX==0x7E) {return true;}

"|="是逻辑上的OR?然后是一个死胡同......。

"|="在这种情况下是一个位法 "或"。 这个东西在等于A[i]的位置上用XX来提升比特。

而如果在循环之后,所有的1到6位都是1,这意味着所有的1到6位在数字X中正好相遇一次。

0x7E是二进制数111110的十六进制表示。(右边的位子为零)

 
jartmailru:

或者是在C++中?
.
验证--单一参数的函数。
也许我们应该用老方法来做......分配内存并缓存一个bool
为所有有效的参数值?

在MQL中,你可以开出一个订单,万一出现奇迹,曲棍球号码平分秋色呢!:))

但说真的,我绝对不是你的对手。


MetaDriver

在这种情况下,"|="是一个位法的 "或"。 这个东西在等于A[i]的位置上提高了XX位。

而如果在循环之后,所有的1到6位都是1,这意味着1到6的所有数字在数字X中正好出现一次。

0x7E是二进制数111110的十六进制表示。(右侧位为零)
这是最令我困扰的地方。谢谢你。知道了!
 
jartmailru:

1.不过,C++怎么样?
.
2. 验证--一个参数函数。
也许我们应该用老式的方法来做......。...分配内存并缓存一个bool
为所有有效的参数值?

1. 嗯,语言和环境并不是真正的重点。 问题的关键在于算法本身。

2....Uh...还有什么?

 
MaxZ:

但125毫秒显然没有追上。

你不应该这样做。你的读数是47毫秒。

太糟糕了,你没有一个解决方案,很难比较结果...:)))

.

但我还是不明白为什么我们要按人物进行比较。

if(A6!=B6 && A5!=B5 && A4!=B4 && A3!=B3 && A2!=B2 && A1!=B1)

?

看来,在单一立场上的重叠是不严谨的?

 
MetaDriver:

你不应该这样做。你的读数是47毫秒。

太糟糕了,你没有一个解决方案,很难比较结果...:)))

.

但我还是不明白为什么我们要按人物进行比较。

if(A6!=B6 && A5!=B5 && A4!=B4 && A3!=B3 && A2!=B2 && A1!=B1)

?

在我看来,单一立场的巧合是不加批判的?

看看这个!:DDD


我在为速度而挣扎。

我相信,这个条件。

if (A6 != B6 && A5 != B5 && A4 != B4 && A3 != B3 && A2 != B2 && A1 != B1)

将比下面几行的执行速度快很多倍。

int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;

而且这种情况不止一次地被触发。这在速度上的增长并不差。尽管它可能不是那么重要。我们可以把它拆下来,然后进行检查。但我仍然站在这个条件是合理的一边。

 
MaxZ:


我在为速度而挣扎。

我相信,这个条件。

if (A6 != B6 && A5 != B5 && A4 != B4 && A3 != B3 && A2 != B2 && A1 != B1)

将比下面几行的运行速度快很多倍。

int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;

而且这种情况不止一次地被触发。事实证明,它在性能上有不错的增益。尽管也许它并不那么可观。你可以把它拆下来检查一下。但我还是站在这个条件自圆其说的一方。

但这似乎是不正确的。例如,如果A4==B4,条件将是假的,而数字可能不同(例如654321和124365)。
 

更正了,是这样做的。

                                    for(int B1=1; B1<=6; B1++)
                                      {
                                       if(B1==B2 || B1==B3 || B1==B4 || B1==B5 || B1==B6) continue;
//                                       if(A6!=B6 && A5!=B5 && A4!=B4 && A3!=B3 && A2!=B2 && A1!=B1)
                                         {
                                          int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
                                          int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;
                                          if (A==B) continue;
                                          if(MathMod(A,B)==0)
                                             Print(A6,A5,A4,A3,A2,A1,"/",B6,B5,B4,B3,B2,B1,"=",A/B);
                                         }
                                      }
                                   }

同47毫秒。

所以--没有必要为这个条件而烦恼。

 
MetaDriver:

更正了,是这样做的。

同47毫秒。

所以--不要为这个条件而烦恼。

弄错了...而我说的是速度!:))我无法思考。已经过了我的睡觉时间。我的当地时间 是早上6点...

这是你如何做的代码。

                                    for (int B1=1; B1<=6; B1++)
                                    {
                                       if (B1==B2 || B1==B3 || B1==B4 || B1==B5 || B1==B6) continue;
                                       if (A6==B6 && A5==B5 && A4==B4 && A3==B3 && A2==B2 && A1==B1) continue;
                                       
                                       int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
                                       int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;
                                       if (A < B) continue;
                                       if (MathMod(A,B)==0)
                                           Print(A6,A5,A4,A3,A2,A1,"/",B6,B5,B4,B3,B2,B1,"=",A/B);
                                    }

这也太过分了。

                                       if (A==B) continue;
                                       if (MathMod(A,B)==0)

...因为脚本将不得不用少的除以多的...

 

糟糕。Volodya 你还得带着这个东西冻着?你去那里 - 火!多少次了!

你的是一头猪。真诚的...

 
MaxZ:

这就是你如何用代码做的。


是的,这就好了。 31毫秒。

Svinozavr 22.08.2011 01:58

糟糕。Volodya 这是要冻结吗?就这样吧--放弃吧!你有多大能耐!

你的是猪。真诚的...

艺术家的任性....:)

商人的动机在一周内就会变得无聊。有时,你可以为了对艺术的热爱而下车。;)

原因: