現在、1 ~ 9 の数字を繰り返しなしで使用して、9 桁のすべての数字を見つけるアルゴリズムに取り組んでいます。私は、数字をフィルタリングすることでより効率的な数独チェッカーができるという理論をテストしています。
私が実装したコードは次のことを行います。(a)(b)(c)(d)(e)(f)(g)(h)(i) = ###### のように、数字の 1 から 9 までの for ループを使用します。 ###。
私の理論では、数字の合計 (ai) が 45 に等しいかどうかをチェックすることによって、a から i までの積は 9 に等しいということです! そして、ai の逆数の合計はおよそ 2.828968 (または 1 + 1/2 + 1/3 ... 1/9) に等しい
問題は、ai の逆数の合計で 9 桁の数字をフィルター処理した後、予測される可能性のある 9 桁の数字の数が 9 未満になることです。(可能な数の実際の量)。なぜそんなにフィルタリングしているのかはわかりませんが、キャッチする数字には繰り返しがありません (これは良いことです)。
私の考えでは、ダブルスで遊んでいる方法がアルゴリズムを台無しにしているということです。
これが私のコードです:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int product;
int sum;
int count=0;
double inverseSum;
double correctInverseSum=(1.0/1.0)+(1.0/2.0)+(1.0/3.0)+(1.0/4.0)+(1.0/5.0)+
(1.0/6.0)+(1.0/7.0)+(1.0/8.0)+(1.0/9.0);
for(double a=1.0; a<10.0; a++){
for(double b=1.0; b<10.0; b++){
for(double c=1.0; c<10.0; c++){
for(double d=1.0; d<10.0; d++){
for(double e=1.0; e<10.0; e++){
for(double f=1.0; f<10.0; f++){
for(double g=1.0; g<10.0; g++){
for(double h=1.0; h<10.0; h++){
for(double i=1.0; i<10.0; i++){
product=a*b*c*d*e*f*g*h*i;
sum=a+b+c+d+e+f+g+h+i;
if(product==9*8*7*6*5*4*3*2*1 && sum==45){
inverseSum=(1.0/a)+(1.0/b)+(1.0/c)+(1.0/d)+
(1.0/e)+(1.0/f)+(1.0/g)+(1.0/h)+(1.0/i);
if(inverseSum==correctInverseSum)
{
count++;
}
}
}
}
}
}
}
}
}
}
}
cout<<"This is the count:"<<count<<endl;
return 0;
}