CodeIQの問題

 投稿者:山中和義  投稿日:2015年 3月28日(土)10時31分25秒
  問題
A+B=15、A+2B=35です。
このときA+B+Cはいくつでしょう?


A,B,Cの文字式と解釈して苦戦!(思い込み)

考察
13進法,14進法,15進法,… と見ていき、16進法で題意を満たす。
(終わり)

PRINT BSTR$(10+11,16), BSTR$(10+(2*16+11),16)
PRINT BSTR$(10+11+12,16)
END


たとえば、
0123456789aABCDEFfとする18進法の場合、A+B=15、A+2B=35なので、A+B+C=20となる。

0123456789ABCDEFも思い込みなのか!?

 

Re: CodeIQの問題

 投稿者:Takao Kosugi  投稿日:2015年 3月29日(日)20時22分20秒
  > No.3616[元記事へ]

条件としてのCを使う文字式が欠けています。
A+B+Cを、このままじゃ導けません。




山中和義さんへのお返事です。

> 問題
> A+B=15、A+2B=35です。
> このときA+B+Cはいくつでしょう?
>
>
> A,B,Cの文字式と解釈して苦戦!(思い込み)
>
> 考察
> 13進法,14進法,15進法,… と見ていき、16進法で題意を満たす。
> (終わり)
>
> PRINT BSTR$(10+11,16), BSTR$(10+(2*16+11),16)
> PRINT BSTR$(10+11+12,16)
> END
>
>
> たとえば、
> 0123456789aABCDEFfとする18進法の場合、A+B=15、A+2B=35なので、A+B+C=20となる。
>
> 0123456789ABCDEFも思い込みなのか!?
>
>
 

Re: CodeIQの問題

 投稿者:山中和義  投稿日:2015年 3月30日(月)10時28分50秒
  > No.3616[元記事へ]

問題 几帳MEN
30個のみかんがあります。
3人で10個ずつ分けようと思いますが、不公平にならないように、
みかんの重さの合計が均一になるように分けてください。


考察
まず、

 問題
 9個のみかんがあります。
 3人で3個ずつ分けようと思いますが、不公平にならないように、
 みかんの重さの合計が均一になるように分けてください。

の場合、
組み合わせで考えると、C(9,3)、C(6,3)と選んでいく。


DATA 9 !個数
DATA 86,106,85,128,95,96,91,102,108 !重さ
READ N
DIM B(N)
MAT READ B

LET S=0
FOR i=1 TO N
   LET S=S+B(i)
NEXT i
PRINT S; S/3 !合計

DIM F(N) !選択されたかどうか
MAT F=ZER
FOR P=1 TO N-2 !1つ目を選ぶ(組み合わせの基準とする)
   IF F(P)=0 THEN

      LET X=P+1 !2つ目を選ぶ
      DO WHILE X<=N-1
         IF F(X)=0 THEN

            FOR Y=X+1 TO N !3つ目を選ぶ
               IF F(Y)=0 THEN

                  IF B(P)+B(X)+B(Y)=S/3 THEN !題意を満たす
                     LET F(X)=1
                     LET F(Y)=1
                     PRINT B(P);B(X);B(Y)

                     !!!EXIT DO !解の1つ
                  END IF

               END IF
            NEXT Y

         END IF
         LET X=X+1
      LOOP

   END IF
NEXT P
END


実行結果

897  299
86  85  128
106  91  102
95  96  108


30個なら、C(30,10)、C(20,10)となって、検索範囲が増大する。

そこで、

ほぼ均等に分けると、それぞれ1回程度の交換で完成させることが期待できる。これを使って、1つの解を得る。
(終わり)


答え
85,86,91,95,96,102,106,108,128と昇順に並べる。
次のように、ほぼ均等に分ける。
 A: 1番目 6番目 7番目
 B: 2番目 5番目 8番目
 C: 3番目 4番目 9番目
すなわち、
 A: 85,102,106 =293
 B: 86, 96,108 =290
 C: 91, 95,128 =314

Aから順に、揃えていく。

・Aの85を移動させることを考える。299-293=6なので、85+6=91
 A: (91), 102 , 106 =299
 B:  86 ,  96 , 108 =290
 C: (85),  95 , 128 =308
 続いて、Bの86を移動させることを考える。299-290=9なので、86+9=95
  A:  91 , 102 , 106 =299
  B: (95),  96 , 108 =299
  C:  85 , (86), 128 =299
 続いて、Bの96,108を移動させることを考える。105,117になるので、移動できるものがない。

・Aの102を移動させることを考える。299-293=6なので、102+6=108
 A:  85 , (108),  106  =299
 B:  86 ,   96 , (102) =284
 C:  91 ,   95 ,  128  =314
 続いて、Bの86,96,102を移動させることを考えるが、これらは移動できない。
  A:  85 ,  108 ,  106  =299
  B:  86 ,   96 ,  102  =284
  C:  91 ,   95 ,  128  =314

・Aの106を移動させることを考える。
 299-293=6なので、106+6=112になるので、移動できるものがない。
(終わり)



DATA 9 !個数
DATA 86,106,85,128,95,96,91,102,108 !重み

!DATA 30 !個数
!DATA 138,104,139,124,157,128,134,150,157, 81 !重み
!DATA 159,159, 98,134,147,154,113,117,138,156
!DATA 116,147, 81,150, 95,131,156, 91,105,132

READ N
DIM D(N)
MAT READ D
LET S=0
FOR i=1 TO N
   LET S=S+D(i)
NEXT i
PRINT S; S/3


FOR i=1 TO N-1 !並べ替える
   FOR J=i+1 TO N
      IF D(i)>D(J) THEN
         LET T=D(i) !swap it
         LET D(i)=D(J)
         LET D(J)=T
      END IF
   NEXT J
NEXT i
MAT PRINT D;


DATA 3 !ほぼ均等に分ける
DATA 1,6,7
DATA 2,5,8
DATA 3,4,9

!DATA 10 !ほぼ均等に分ける
!DATA 1,6,7,12,13,18,19,24,25, 28
!DATA 2,5,8,11,14,17,20,23,26, 29
!DATA 3,4,9,10,15,16,21,22,27, 30

READ K
DIM A(N)
FOR i=1 TO N
   READ T
   LET A(i)=D(T)
NEXT i
MAT PRINT USING REPEAT$(" ###",K): A


FOR P=1 TO N/K
   LET T=0 !p番目の人の合計
   FOR i=1 TO K
      LET T=T+A((P-1)*K+i)
   NEXT i
   PRINT T
NEXT P
PRINT


CALL try(1,N,A,K,S/3) !移動を試みる

END


EXTERNAL SUB try(P,N,A(),K,S) !1つ移動させる
LET T=0 !p番目の人の合計
FOR i=1 TO K
   LET T=T+A((P-1)*K+i)
NEXT i
PRINT T !debug

IF P=N/K THEN !最後の人なら
   MAT PRINT USING REPEAT$(" ###",K): A
ELSE
   FOR i=1 TO K !p番目の人のi番目のみかんを入れ替える
      LET X=(P-1)*K+i
      FOR J=P*K+1 TO N !(p+1)番目以降の人のみかんが対象である
         IF T-A(X)+A(J)=S THEN !可能なら
            PRINT P; X;J !debug
            LET W=A(X) !swap it
            LET A(X)=A(J)
            LET A(J)=W
            CALL try(P+1,N,A,K,S) !次の人へ

            LET W=A(X) !元に戻す
            LET A(X)=A(J)
            LET A(J)=W
         END IF
      NEXT J
   NEXT i
END IF
END SUB


実行結果

897  299
85  86  91  95  96  102  106  108  128

  85 102 106
  86  96 108
  91  95 128
293
290
314

293
1  1  7
290
2  4  8
299
  91 102 106
  95  96 108
  85  86 128
1  2  6
284


 

Re: CodeIQの問題

 投稿者:山中和義  投稿日:2015年 3月31日(火)10時26分10秒
  > No.3618[元記事へ]

問題 不思議な数字
次の条件を満たす数を求めなさい。
・0を除く全ての一桁の数で割り切れる。
・この数に含まれる任意の隣り合う二桁でも割ることができる。
・数字の0から9までを一度ずつ使っている数である。

答え

OPTION ARITHMETIC RATIONAL

DIM F(0 TO 9)

LET M=2^3*3^2*5*7 !条件1
PRINT M !debug
FOR N=CEIL(1023456789/M)*M TO 9876543210 STEP M

   LET T=N
   MAT F=ZER !条件3
   DO WHILE T>=10
      LET P=MOD(T,10)
      IF F(P)=1 THEN EXIT DO
      LET F(P)=1

      LET W=MOD(T,100) !条件2
      IF W=0 THEN EXIT DO !…00…の並び
      IF MOD(N,W)<>0 THEN EXIT DO

      LET T=INT(T/10)
   LOOP
   IF T<10 AND F(T)=0 THEN PRINT N !答え

NEXT N

END



実行結果

2520
3912657840


 

Re: CodeIQの問題

 投稿者:山中和義  投稿日:2015年 4月 3日(金)18時31分39秒
  > No.3619[元記事へ]

問題
a≦bのとき、最小公倍数が50!(50の階乗)となるような組(a,b)は全部で何組あるでしょうか。

説明
最小公倍数が24になるような数の組 (a,b) を考えましょう。
a≦b のとき、そのような組は全部で11組あることが分かります。
 (1,24) (2,24) (3,8) (3,24) (4,24) (6,8)
 (6,24) (8,12) (8,24) (12,24) (24,24)
また、a≦b のとき、最小公倍数が6!(6の階乗、つまり720)となるような組(a,b)は全部で68組あります。
(終わり)


答え

OPTION ARITHMETIC RATIONAL

LET N=50

!まず、n!(nの階乗)を素因数分解する。

DIM F(N) !添え字p、値eで、p^eを表す
FOR i=1 TO N !1,2,3,4,5,…
   LET F(i)=i
NEXT i

FOR i=1 TO N !因子i
   LET T=F(i)
   LET F(i)=0 !個数
   IF T>1 THEN
      LET S=1
      FOR K=2*i TO N STEP i !割っていく
         LET S=S+1
         LET F(K)=F(K)/T
      NEXT K
      LET F(T)=F(T)+S !累積する
   END IF
NEXT i
MAT PRINT F;


!p,q,…,rを素数、e,f,…,gを自然数とする。
!2つの自然数A,B(A<B)の最小公倍数が、m=(p^e)(q^f)…(r^g)となるようなA,Bの組は、
!{(2e+1)(2f+1)…(2g+1)-1}/2 通りである。

!参考サイト
!  投稿一覧
!   ある場合の数

LET T=1
FOR i=1 TO N
   LET T=T*(2*F(i)+1)
NEXT i
PRINT (T-1)/2 +1; "通り" !A=Bすなわち(m,m)を加味する

END


実行結果

0  47  22  0  12  0  8  0  0  0  4  0  3  0  0  0  2  0  2  0  0  0  2  0  0  0  0  0  1  0  1  0  0  0  0  0  1  0  0  0  1  0  1  0  0  0  1  0  0  0

5215226132813 通り


 

Re: CodeIQの問題

 投稿者:山中和義  投稿日:2015年 4月 4日(土)09時45分37秒
  > No.3622[元記事へ]


「設問チラ見!」で問題を閲覧することができます。また、受付が終了すると、見れなくなるみたいです。


 

戻る