[アーカイブ!】純粋数学、物理学、化学など:トレードとは一切関係ない脳トレ問題集 - ページ 511

 

MaxZ:

変更点は理解している。ただ、まだ解明されていないだけです。

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

"|=" は論理的なOR?そして、行き止まりになってしまう...。

"|=" はこの場合、ビット単位の "or "である。 これはA[i]と同じ位置でXXだけビットを持ち上げています。

そして、ループの後、1から6までのビットがすべて1であれば、1から6までのすべての桁が、数Xの中でちょうど1回出会ったことになる。

0x7Eは2進数の1111110を16進数で表現したものです。(右側のビットは0)

 
jartmailru:

それともC++で?
.
Validate-1パラメータを持つ関数。
昔ながらの方法でやるのがいいのかも...。メモリを確保し、boolをキャッシュする
は、引数のすべての有効な値に対して?

MQLでは、奇跡的にホッケーの数が均等に分かれた場合に備えて、注文を出すことができるのです:))

でも、真面目な話、私はあなたと絶対に対等ではありません。


MetaDriver

"|=" はこの場合、ビット単位の "or" になります。 これは、A[i]と同じ位置のビットをXX個上げるものです。

そして、ループの後に1から6までのビットがすべて1であれば、1から6までのすべての桁が数Xにちょうど1回出現することを意味する。

0x7Eは2進数の1111110を16進数で表現したものです。(右ビットが0)
それが一番気になった。ありがとうございます。了解!
 
jartmailru:

1.C++はどうでしょう?
.
2. Validate- 1 パラメータ機能。
昔ながらの方法でやったほうがいいのでは...?...メモリを確保し、boolをキャッシュします。
は、引数のすべての有効な値に対して?

1. まあ、言語や環境はあまり関係ないんですけどね。 要はアルゴリズムそのものです。

2...あの...まだ何かありますか?

 
MaxZ:

しかし、125msは明らかに追いついていない。

それはやめたほうがいい。読みは47msです。

解答がないのは残念、結果を比較するのは難しい...。:)))

.

しかし、なぜキャラクターで比較しなければならないのか、いまだに理解できません。

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

?

一つの立場での重なりは、無批判に思えるのですが?

 
MetaDriver:

それはやめたほうがいい。読みは47msです。

解答がないのは残念、結果を比較するのは難しい...。:)))

.

しかし、なぜキャラクターで比較しなければならないのか、いまだに理解できません。

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);
                                         }
                                      }
                                   }

同じく47ms。

だから--この状態で悩む必要はない。

 
MetaDriver:

を修正し、このように作りました。

同じく47ms。

だから--その条件をわざわざ満たす必要はない。

間違えた...そして、スピードの話です!:))頭が真っ白になる就寝時間を過ぎてしまった。私の現地時間は 朝の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:

それが、コードでやる方法です。


うん、その方がいい。 31ms。

スヴィノザヴル 2011.08.22 01:58

クソッVolodya そして、これは凍結するため?ほらね〜、辞めなさい〜。どれだけできるのか!

あなたのはPigです。心から...

アーティストの気まぐれ...。:)

メルカリモチベーションは1週間で飽きる。芸術を愛するが故に降りられることもある。;)