[아카이브] 순수수학, 물리학, 화학 등 : 거래와 무관한 두뇌 트레이닝 퍼즐 - 페이지 511

 

MaxZ :

변경 사항을 이해합니다. 나는 아직 그것에 대해 이해하지 못했습니다.

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

"|=" - 논리적 "OR"? 그리고 거기에 완전한 혼란이 있습니다 ...

"|=" - 이 경우 비트 단위 "또는"입니다. 이것은 A[i]와 같은 위치에서 XX만큼 비트를 올립니다.

그리고 사이클 후에 첫 번째부터 여섯 번째까지의 모든 비트가 1로 판명되면 1에서 6까지의 모든 숫자가 숫자 X에서 정확히 한 번 만났음을 의미합니다.

0x7E - 이진수 1111110의 16진수 표현입니다. (오른쪽 비트는 0입니다)

 
jartmailru :

아니면 C++에서?
.
Validate는 단일 매개변수 함수입니다.
아마도 구식 방법 ... 메모리 및 캐시 bool 할당
모든 유효한 인수 값에 대해?

MQL에서는 기적적으로 하키 번호가 완전히 분할되면 주문을 열 수 있습니다! :))

하지만 진지하게, 나는 확실히 당신과 어울리지 않습니다.


메타드라이버 :

"|=" - 이 경우 비트 단위 "또는"입니다. 이것은 A[i]와 같은 위치에서 XX만큼 비트를 올립니다.

그리고 사이클 후에 첫 번째부터 여섯 번째까지의 모든 비트가 1로 판명되면 1에서 6까지의 모든 숫자가 숫자 X에서 정확히 한 번 만났음을 의미합니다.

0x7E - 이진수 1111110의 16진수 표현입니다. (오른쪽 비트는 0입니다)
이것이 가장 상처를 준 것입니다. 고맙습니다. 알았다!
 
jartmailru :

1. 아니면 C++로?
.
2. 유효성 검사 - 한 매개변수의 기능입니다.
아마도 구식 방법 ... 메모리 및 캐시 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인 경우 조건은 거짓이지만 숫자는 다를 수 있습니다(예: 65 4 321 및 12 4 365).
 

고쳤어, 해냈어

                                     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.

스비노자 브르 22.08.2011 01:58

쓰레기. Volodya 그리고 이것은 동결되어야합니까? 자, 여기 있습니다! 언제까지!

당신의 돼지입니다. 감사합니다...

작가의 변덕.... :)

상업 동기는 일주일 만에 지루해집니다. 때로는 예술에 대한 사랑에서 벗어날 수 있습니다. ;)