4桁の数字(0000~9999)で+-*/の演算子を使いどうにかして10に出来る数列を探すプログラムを作ろうとしています。
(例)1811→(1+1)*1+8=10
#include<stdio.h>
bool keisan(int,int,int,int);
bool hanbetu(int*);
int suu[1000][4];
int j = 0;
int main(){
int i1, i2, i3, i4;
int khairetu[4];
int atai=0;
for (i1 = 0; i1 < 1000; i1++){
for (i2 = 0; i2 < 4; i2++){
suu[i1][i2] = -1;
}
}
for (i1 = 0; i1 < 10; i1++){
for (i2 = 0; i2 < 10; i2++){
for (i3 = 0; i3 < 10; i3++){
for (i4 = 0; i4 < 10; i4++){
khairetu[0] = i1;
khairetu[1] = i2;
khairetu[2] = i3;
khairetu[3] = i4;
if (hanbetu(khairetu) ==true){
continue;
}
if (keisan(khairetu[0], khairetu[1], khairetu[2], khairetu[3]) == false){
printf("%d,%d,%d,%d\n", khairetu[0], khairetu[1], khairetu[2], khairetu[3]);
}
}
}
}
}
printf("j=%d",j);
rewind(stdin);
getchar();
return 0;
}
bool keisan(int a1, int a2, int a3, int a4){
int i1,i2,i3,i4,ans=0;
for (i1 = 0; i1 < 4; i1++){
for (i2 = 0; i2 < 4; i2++){
for (i3 = 0; i3 < 4; i3++){
ans = 0;
switch (i1){
case 0:ans = a1 + a2; break;
case 1:ans = a1 - a2; break;
case 2:ans = a1 * a2; break;
case 3:if (a2 == 0) break;
if (a1%a2 > 0){
ans = -100000;
}else ans = a1 / a2;
}
switch (i2){
case 0:ans += a3; break;
case 1:ans -= a3; break;
case 2:ans *= a3; break;
case 3:if (a3 == 0)break;
if (ans%a3 > 0){
ans = -100000;
}
else ans /= a3;
}
switch (i3){
case 0:ans += a4; break;
case 1:ans -= a4; break;
case 2:ans *= a4; break;
case 3:if (a4 == 0) break;
if (ans%a4 > 0){
ans = -100000;
}
else ans /= a4;
}
if (ans == 10){
return true;
}
}
}
}
return false;
}
bool hanbetu(int *k){
int i, t, tmp;
bool h=false;
for (i = 0; i < 3; i++){
for (t = i + 1; t < 4; t++){
if (k[i]<k[t]){
tmp = k[i];
k[i] = k[t];
k[t] = tmp;
}
}
}
for (i = 0; i <= j; i++){
if (suu[i][0] == k[0] && suu[i][1] == k[1] && suu[i][2] == k[2] && suu[i][3] == k[0]){
h = true;
}
}
if (h == true){
return true;
}else{
suu[j][0] = k[0];
suu[j][1] = k[1];
suu[j][2] = k[2];
suu[j][3] = k[3];
/*printf("%d%d%d%d\n", suu[j][0], suu[j][1], suu[j][2], suu[j][3]);*/
j++;
return false;
}
}
0001と0100などは同じものとして扱うように出力から弾き出そうとしています。
出力結果で数字がいくつか飛んでしまいます。原因がわからないので質問させてもらいます。
またプログラムの書き方等指摘していただけるとありがたいです。