過去の桐井戸端BBS (桐ver.8)
15380 目的数字をいくつかの倍数数字で割振りしたい masa 2002/03/07-15:40
すみません。またよろしくお願いします。
表A項目[1]の値の数字を、表B項目[2]〜[14]のいくつかの値の倍数数字で分割したいのですが、
どうしたら出来るでしょうか?


表A
[1]
127
262
149
 ・
 ・
 ・ 

表B
[2][3][4][5][6][7]〜[14]
 11  13  21  22  31  35
  

求めたい物

127=[3]×2 +[5]×3 +[7]×1
262=[2]×3 +[6]×4 +[7]×3
149=[4]×5 +[5]×2

何種類か答えがあってもどれか1つイコールになった時点でOKです。
繰り返しの式を使うような気がしますが、かなりの量になってしまうのでしょうか?

15394 Re:目的数字の割振りについて masa 2002/03/08-11:18
記事番号15380へのコメント
仮に各々の数字が10倍までと仮定して(11×1、11×2、11×3〜11×10、〜13×10)
それぞれを1つの項目に入れて検索させようと考えたら、
1項目値×10種類で、全項目13個を足した時、合う場合で
10種類×10種類×10種類×・・計13回と
12個の項目合計で合う場合で
10種類×10種類×10種類×・・計12回と
11個の項目合計で合う場合で
10種類×10種類×10種類×・・計11回と
10個の項目合計で合う場合で
10種類×10種類×10種類×・・計10回と
9個の項目合計で合う場合で
10種類×10種類×10種類×・・計9回と




と考えたら、とんでもないデータ量になってしまいました。
スーパーコンピューター並みの(大げさ?)処理が必要?
暗号解読と同じくらい難しそうです?
カンを頼りに割振るしかないですね・・・・


15488 Re:目的数字の割振りについて ひろ君 2002/03/17-17:05
記事番号15380へのコメント
masaさん


初めまして 
最近ここを知ってROMしてました。これからよろしくお願いします。

繰り返しでは大変そうで、桐でも「再帰呼び出し?」ができるのではと作ってみました。
代入文が長くなりそうだったのですべて変数内で操作しています。
無駄な部分もあると思いますが「再帰呼び出し」は20年くらい前にパスカルでやったことがあるだけで
しかも桐では初めてなのでゆるしてください。
できなかったときは 「&できない=1」になります。

ところでこれは何に使うのですか。よければ教えてください。


”***.cmd”

変数宣言 固有,整数{&合計=127, &N=7,&できない=1}
変数宣言 固有,整数{&被乗数[&N]={11,13,21,22,31,35}}
変数宣言 固有,整数{&乗数[&N]= {0,0,0,0,0,0,0}}
手続き実行 計算(&合計)
変数管理 固有
終了

手続き定義開始 計算(整数 &合計)
 手続き実行 再帰呼び出し2(&合計,1,&できない)
 条件 (&できない) 手続き実行 再帰呼び出し1(&合計, 1, 0, &できない)
手続き定義終了

手続き定義開始 再帰呼び出し1(参照 整数 &合計,整数 &L,整数 &M,参照 整数 &できない)
 条件 (&N > &L) 手続き実行 再帰呼び出し1(&合計,&L+1,&M,&できない)
 分岐 (.NOT &できない) 呼び出し1終了
 代入 &合計=&合計-&被乗数[&L], &乗数[&L]=&乗数[&L]+1
 条件 (&合計 > 0) 手続き実行 再帰呼び出し1(&合計,&L,&M+1,&できない)
 分岐 (.NOT &できない) 呼び出し1終了
 &合計=&合計+&被乗数[&L], &乗数[&L]=&乗数[&L]-1
 手続き実行 再帰呼び出し2(&合計,1,&できない)
 名札 呼び出し1終了
手続き定義終了

手続き定義開始 再帰呼び出し2(整数 &合計,整数 &K,参照 整数 &できない)
 条件 (&K<&N) 手続き実行 再帰呼び出し2(&合計, &K+1, &できない)
 分岐 (.NOT &できない) 呼び出し2終了
 &できない=#MOD(&合計,&被乗数[&K])
 条件 (.NOT &できない) &乗数[&K]=#INT(&合計/&被乗数[&K])
 名札 呼び出し2終了
手続き定義終了

戻る