C言語で入力した数字で10が作れるかどうかを確認するMake10作りました。
試しに色々な数字を入れて確認しましたが、「8115」が解けません。
(8÷(1-(1÷5)))=10
になるのを期待したんだけどなぁ。
Floatとかdouble使うしかないのでしょうか。
C
#include <stdio.h> typedef int (*Op)(int, int); int add(int a, int b) { return (a + b); } int sub(int a, int b) { return (a - b); } int mul(int a, int b) { return (a * b); } int div(int a, int b) { return b ? (a / b) : 9999; } Op o[] = { add, sub, mul, div }; char* op_str[] = { "+", "-", "×", "÷" }; int main() { int num[4] = { 0 }; int a, b, c, d; // オペランド int i, j, k; // 演算子 int n; // 標準入力(エラーチェックなし) char str[256]; printf("4桁の数字を入力してください。\n"); scanf_s("%s", str,256); printf("入力値は「%s」です。\n", str); a = str[0] - '0'; b = str[1] - '0'; c = str[2] - '0'; d = str[3] - '0'; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { // (a+b)+(c+d) if (o[j](o[i](a, b), o[k](c, d)) == 10) { printf("(%d %s %d) %s (%d %s %d)\n", a, op_str[i], b, op_str[j], c, op_str[k], d); } // {(a+b)+c}+d if(o[k](o[j](o[i](a, b), c),d) == 10){ printf("{(%d %s %d) %s %d} %s %d\n", a, op_str[i], b, op_str[j], c, op_str[k], d); } // a+{b+(c+d)} if (o[i](a, o[j](b, o[k](c, d))) == 10) { printf("%d %s {%d %s (%d %s %d)}\n", a, op_str[i], b, op_str[j], c, op_str[k], d); } // {a+(b+c)}+d if(o[k](o[i](a, o[j](b, c)), d) == 10){ printf("{%d %s (%d %s %d)} %s %d\n", a, op_str[i], b, op_str[j], c, op_str[k], d); } // a+{(b+c)+d} if (o[i](a, o[k](o[j](b, c), d)) == 10) { printf("%d %s {(%d %s %d) %s %d}\n", a, op_str[i], b, op_str[j], c, op_str[k], d); } } } } }
まだ回答がついていません
会員登録して回答してみよう