0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

4桁で10を作る計算をさせてみた

Last updated at Posted at 2025-11-30

動機・やりたいこと

車に乗ったとき、前の車のナンバーで10を作る計算をしています。(家族が乗っているときに、たまに)
で、どんな組み合わせだと10になるかなーって思ったので計算させました。

作成環境

  • FreeBSD 14.3-RELEASE-p5 GENERIC amd64
  • FreeBSD clang version 19.1.7
    Target: x86_64-unknown-freebsd14.3
    Thread model: posix

ソースです。(無駄があるのは承知の上で)

計算ルール

  • 4桁(0000-9999)で、各桁の数字を入れ替えることはしない。
  • 四則演算のみ、()とか累乗の計算はしない。
  • 四則演算を入れ替えての計算は行う。
  • 計算結果が10になったもののみ表示
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int calc(float, float, float, float);

int main()
{
        int a, b, c, d;

        for(a=0; a<10; a++)
            for(b=0; b<10; b++)
               for(c=0; c<10; c++)
                  for(d=0; d<10; d++)
                     calc((float)a,(float)b,(float)c,(float)d);

        return 0;
}

int calc(float a, float b, float c, float d)
{
/*** less / ***/
        if( a+b-c*d == 10) printf("%d+%d-%d*%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        if( a+b*c-d == 10) printf("%d+%d*%d-%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        if( a-b+c*d == 10) printf("%d-%d+%d*%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        if( a-b*c+d == 10) printf("%d-%d*%d+%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        if( a*b-c+d == 10) printf("%d*%d-%d+%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        if( a*b+c-d == 10) printf("%d*%d+%d-%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);

/*** less * ***/
        if(d != 0)
        {
                if( a+b-c/d == 10) printf("%d+%d-%d/%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
                if( a-b+c/d == 10) printf("%d-%d+%d/%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        }
        if(c != 0)
        {
                if( a+b/c-d == 10) printf("%d+%d/%d-%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
                if( a-b/c+d == 10) printf("%d-%d/%d+%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        }
        if(b != 0)
        {
                if( a/b-c+d == 10) printf("%d/%d-%d+%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
                if( a/b+c-d == 10) printf("%d/%d+%d-%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        }

/*** less + ***/
        if(d != 0)
        {
            if( a*b-c/d == 10) printf("%d*%d-%d/%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
            if( a-b*c/d == 10) printf("%d-%d*%d/%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        }
        if(c != 0)
        {
            if( a*b/c-d == 10) printf("%d*%d/%d-%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
            if( a-b/c*d == 10) printf("%d-%d/%d*%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        }
        if(b != 0)
        {
            if( a/b-c*d == 10) printf("%d/%d-%d*%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
            if( a/b*c-d == 10) printf("%d/%d*%d-%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        }  

/*** less - ***/
        if(d != 0)
        {
            if( a*b+c/d == 10) printf("%d*%d+%d/%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
            if( a+b*c/d == 10) printf("%d+%d*%d/%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        }
        if(c != 0)
        {
            if( a*b/c+d == 10) printf("%d*%d/%d+%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
            if( a+b/c*d == 10) printf("%d+%d/%d*%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        }
        if(b != 0)
        {
            if( a/b+c*d == 10) printf("%d/%d+%d*%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
            if( a/b*c+d == 10) printf("%d/%d*%d+%d = 10\r\n",(int)a, (int)b, (int)c, (int)d);
        }
        
        return (int)1000*a+100*b+10*c+d;
}

結果

結果ですが、膨大な行数なのでテキストファイルへのリンクを張っておきます。
4keta.txt

ふり返り

  • wc -l 4keta.txtだと3303行と出ました。多いか少ないかは分かりません。
  • ゼロ除算の処理はもっとスマートな方法がありますが、実装の方法をこれから覚えたいです。
  • 4桁を入れると即座に計算を表示させるWebアプリを作ってみたいです。
0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?