下へ
>  2009/05/27 (水) 23:36:21        [qwerty]
> > 10+10-11ってのもあるんじゃない?(;´Д`)
> 整列していって小さい方から足していくんだよ(;´Д`)
> 対象になる数を超えればそれ以上やる必要ない

試してみたが劇的に早くなった(;´Д`)


#include "stdafx.h"
#include <stdlib.h>
#include <string>
#include <vector>
#include <algorithm>

__int64 table[]={1,5,3,2,8,4,9,0,1,2,3,4,1,5,3,2,8,4,9,0,1,2,3,4};
int ntable = sizeof(table)/sizeof(__int64);

const __int64 target = 9;

__int64 func( std::string &str, __int64 total, __int64 *tbl, int ntbl)
{
  if(total>target) return total;

  for(int i=0;i<ntbl; ++i){
	std::string s = str+",";
	char buf[0x40];
        _ltoa_s((long)tbl[i],buf,0x40,10);
        s += buf;
	if( total+tbl[i]==9){
	  printf("みつけたよ(%s)\n", s.c_str());
	} else {
	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
	}
  }
  return total;
}

int _tmain(int argc, _TCHAR* argv[])
{
  std::vector<__int64> data;
  data.resize(ntable);
  for(int i=0;i<ntable;++i){
    data[i]=table[i];
  }
  std::sort(data.begin(),data.end());

   std::string str;
   func(str, 0, &data[0], ntable);
 return 0;
}

参考:2009/05/27(水)23時20分35秒

>  2009/05/27 (水) 23:29:46        [qwerty]
> > なるほど、それならだいぶ減るか
> > しかし全てが10未満だったら結局全部やることにはなるな(;´Д`)
> 合計=700
> 数字=-500,1,100,200,400,600,699
> これだと600の時点で超えてしまうが1,699も答えという悲しい現実があるな(;´Д`)

1を取ったら699が存在するか調べればいいんじゃね?
ブーリアン型の配列を持っておくとかして
メモリ量はすげえ喰うけど

参考:2009/05/27(水)23時27分50秒

>  2009/05/27 (水) 23:27:50        [qwerty]
> > 整列していって小さい方から足していくんだよ(;´Д`)
> > 対象になる数を超えればそれ以上やる必要ない
> なるほど、それならだいぶ減るか
> しかし全てが10未満だったら結局全部やることにはなるな(;´Д`)

合計=700
数字=-500,1,100,200,400,600,699
これだと600の時点で超えてしまうが1,699も答えという悲しい現実があるな(;´Д`)

参考:2009/05/27(水)23時24分20秒

>  2009/05/27 (水) 23:24:20        [qwerty]
> > 10+10-11ってのもあるんじゃない?(;´Д`)
> 整列していって小さい方から足していくんだよ(;´Д`)
> 対象になる数を超えればそれ以上やる必要ない

なるほど、それならだいぶ減るか
しかし全てが10未満だったら結局全部やることにはなるな(;´Д`)

参考:2009/05/27(水)23時20分35秒

>  2009/05/27 (水) 23:21:58        [qwerty]
> > 10+10-11ってのもあるんじゃない?(;´Д`)
> 整列していって小さい方から足していくんだよ(;´Д`)
> 対象になる数を超えればそれ以上やる必要ない

件数は決まってるみたいだから小さい数から足していくと言う手法に意味があるのかどうか俺にはわからん

参考:2009/05/27(水)23時20分35秒

>  2009/05/27 (水) 23:21:50        [qwerty]
> > 10+10-11ってのもあるんじゃない?(;´Д`)
> 整列していって小さい方から足していくんだよ(;´Д`)
> 対象になる数を超えればそれ以上やる必要ない

それなら10以上の数同士を足しても意味あるじゃん(;´Д`)

参考:2009/05/27(水)23時20分35秒

>  2009/05/27 (水) 23:20:35        [qwerty]
> > +だけで考えてみれば分かるが
> > 10以上の数同士を足しても意味がない
> > 無論-との演算はやるよ
> 10+10-11ってのもあるんじゃない?(;´Д`)

整列していって小さい方から足していくんだよ(;´Д`)
対象になる数を超えればそれ以上やる必要ない

参考:2009/05/27(水)23時17分21秒

>  2009/05/27 (水) 23:19:46        [qwerty]
> > よくわからんが+10009と-10000足せば9じゃないのか
> +だけで考えてみれば分かるが
> 10以上の数同士を足しても意味がない
> 無論-との演算はやるよ

+だけで考えるから駄目なんだよ(;´Д`)
負数があるから10以上の数の持つ値は結果に影響を与えるよ

参考:2009/05/27(水)23時14分51秒

>  2009/05/27 (水) 23:17:21        [qwerty]
> > よくわからんが+10009と-10000足せば9じゃないのか
> +だけで考えてみれば分かるが
> 10以上の数同士を足しても意味がない
> 無論-との演算はやるよ

10+10-11ってのもあるんじゃない?(;´Д`)

参考:2009/05/27(水)23時14分51秒

>  2009/05/27 (水) 23:15:42        [qwerty]
> > まあそれでも最低限の1が9回で2なら5回までと制約をつけらるしね(;´Д`)
> 負数もアリなんだぜ?
> 2,2,2,2,2,2,-3とか

そういやそうか(;´Д`)

参考:2009/05/27(水)23時12分26秒

>  2009/05/27 (水) 23:14:51        [qwerty]
> > +の-の端同士の演算は省けるよ(;´Д`)
> > +10以上と-10以下同士の組み合わせはやらなくて済む
> よくわからんが+10009と-10000足せば9じゃないのか

+だけで考えてみれば分かるが
10以上の数同士を足しても意味がない
無論-との演算はやるよ

参考:2009/05/27(水)23時11分58秒

>  2009/05/27 (水) 23:13:34        [qwerty]
> > それなんだが今思えば全通り出す必要は無くて最初の一通りでいいんだった(;´Д`)
> それなら全然話は変わってくるんだが(;´Д`)

まあとりあえずはあのプログラムで十分要求は満たしたみたいだね(;´Д`)

参考:2009/05/27(水)23時11分27秒

>  2009/05/27 (水) 23:12:26        [qwerty]
> > 同じ数が何度も出てきてもいいみたいだよ?テーブルに1が9個以上あれば1,1,1,1,1,1,1,1,1
> > という組み合わせも一回以上出てくるんじゃない?1が10個あれば1,1,1,1,1,1,1,1,1が2回出てくるんだとおもう(;´Д`)
> まあそれでも最低限の1が9回で2なら5回までと制約をつけらるしね(;´Д`)

負数もアリなんだぜ?
2,2,2,2,2,2,-3とか

参考:2009/05/27(水)23時11分48秒

>  2009/05/27 (水) 23:11:58        [qwerty]
> > 彼の挙げた条件だと+-混交なので無理じゃね
> +の-の端同士の演算は省けるよ(;´Д`)
> +10以上と-10以下同士の組み合わせはやらなくて済む

よくわからんが+10009と-10000足せば9じゃないのか

参考:2009/05/27(水)23時10分05秒

>  2009/05/27 (水) 23:11:48        [qwerty]
> > つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)
> 同じ数が何度も出てきてもいいみたいだよ?テーブルに1が9個以上あれば1,1,1,1,1,1,1,1,1
> という組み合わせも一回以上出てくるんじゃない?1が10個あれば1,1,1,1,1,1,1,1,1が2回出てくるんだとおもう(;´Д`)

まあそれでも最低限の1が9回で2なら5回までと制約をつけらるしね(;´Д`)

参考:2009/05/27(水)23時10分27秒

>  2009/05/27 (水) 23:11:35        [qwerty]
> > こういう場合は現実的な解を得るために遺伝的アルゴリズムとかニューロンモデルとかを使うと聞いた事があるよ(;´Д`)
> でも元問題みたいな銀行の口座チェックとかだと精度が問題になりそう(;´Д`)

あくまでアルゴリズム的な問題としてそういったやり方をするだけで
答え自体は全く正しいものしか出てこないだろう?(;´Д`)

参考:2009/05/27(水)23時09分56秒

>  2009/05/27 (水) 23:11:27        [qwerty]
> > 現実的って言ったって
> > 条件を満たす組み合わせを○個見つけろ!ならともかく全部見つけろ!って言うんだぜ(;´Д`)無理じゃね
> それなんだが今思えば全通り出す必要は無くて最初の一通りでいいんだった(;´Д`)

それなら全然話は変わってくるんだが(;´Д`)

参考:2009/05/27(水)23時10分08秒

>  2009/05/27 (水) 23:11:16        [qwerty]
> > 彼の挙げた条件だと+-混交なので無理じゃね
> +の-の端同士の演算は省けるよ(;´Д`)
> +10以上と-10以下同士の組み合わせはやらなくて済む

すまんが理屈がわからない(;´Д`)数百の組み合わせなのにどうして除外できるんだ

参考:2009/05/27(水)23時10分05秒

>  2009/05/27 (水) 23:10:27        [qwerty]
> > すげえ難しいので総当りは無理だよという意味にほぼ等しい
> > 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> > 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> > ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> > ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる
> つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)

同じ数が何度も出てきてもいいみたいだよ?テーブルに1が9個以上あれば1,1,1,1,1,1,1,1,1
という組み合わせも一回以上出てくるんじゃない?1が10個あれば1,1,1,1,1,1,1,1,1が2回出てくるんだとおもう(;´Д`)

参考:2009/05/27(水)23時03分35秒

>  2009/05/27 (水) 23:10:08        [qwerty]
> > こういう場合は現実的な解を得るために遺伝的アルゴリズムとかニューロンモデルとかを使うと聞いた事があるよ(;´Д`)
> 現実的って言ったって
> 条件を満たす組み合わせを○個見つけろ!ならともかく全部見つけろ!って言うんだぜ(;´Д`)無理じゃね

それなんだが今思えば全通り出す必要は無くて最初の一通りでいいんだった(;´Д`)

参考:2009/05/27(水)23時08分51秒

>  2009/05/27 (水) 23:10:05        [qwerty]
> > つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)
> 彼の挙げた条件だと+-混交なので無理じゃね

+の-の端同士の演算は省けるよ(;´Д`)
+10以上と-10以下同士の組み合わせはやらなくて済む

参考:2009/05/27(水)23時05分53秒

>  2009/05/27 (水) 23:09:56        [qwerty]
> > すげえ難しいので総当りは無理だよという意味にほぼ等しい
> > 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> > 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> > ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> > ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる
> こういう場合は現実的な解を得るために遺伝的アルゴリズムとかニューロンモデルとかを使うと聞いた事があるよ(;´Д`)

でも元問題みたいな銀行の口座チェックとかだと精度が問題になりそう(;´Д`)

参考:2009/05/27(水)23時05分37秒

>  2009/05/27 (水) 23:09:45        [qwerty]
> > こういう場合は現実的な解を得るために遺伝的アルゴリズムとかニューロンモデルとかを使うと聞いた事があるよ(;´Д`)
> 菊川令の卒論でGAは使ってたな
> でもありゃ出たとこ勝負で解が出てるんだからいいだろ的で
> ちょっと乱暴だと思う(;´Д`)

まあ所詮ヒューリスティック系だな(;´Д`)理論的な根拠なんて無い

参考:2009/05/27(水)23時07分36秒

>  2009/05/27 (水) 23:08:51        [qwerty]
> > すげえ難しいので総当りは無理だよという意味にほぼ等しい
> > 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> > 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> > ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> > ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる
> こういう場合は現実的な解を得るために遺伝的アルゴリズムとかニューロンモデルとかを使うと聞いた事があるよ(;´Д`)

現実的って言ったって
条件を満たす組み合わせを○個見つけろ!ならともかく全部見つけろ!って言うんだぜ(;´Д`)無理じゃね

参考:2009/05/27(水)23時05分37秒

>  2009/05/27 (水) 23:08:22        [qwerty]
> > こういう場合は現実的な解を得るために遺伝的アルゴリズムとかニューロンモデルとかを使うと聞いた事があるよ(;´Д`)
> GAやNNはそれなりに適合してくれる解を見つけてくれるけど
> 総当りは無理だからね(;´Д`)

何やら難しい話をしているね(;´Д`)

参考:2009/05/27(水)23時07分48秒

>  2009/05/27 (水) 23:07:48        [qwerty]
> > すげえ難しいので総当りは無理だよという意味にほぼ等しい
> > 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> > 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> > ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> > ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる
> こういう場合は現実的な解を得るために遺伝的アルゴリズムとかニューロンモデルとかを使うと聞いた事があるよ(;´Д`)

GAやNNはそれなりに適合してくれる解を見つけてくれるけど
総当りは無理だからね(;´Д`)

参考:2009/05/27(水)23時05分37秒

>  2009/05/27 (水) 23:07:36        [qwerty]
> > すげえ難しいので総当りは無理だよという意味にほぼ等しい
> > 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> > 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> > ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> > ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる
> こういう場合は現実的な解を得るために遺伝的アルゴリズムとかニューロンモデルとかを使うと聞いた事があるよ(;´Д`)

菊川令の卒論でGAは使ってたな
でもありゃ出たとこ勝負で解が出てるんだからいいだろ的で
ちょっと乱暴だと思う(;´Д`)

参考:2009/05/27(水)23時05分37秒

>  2009/05/27 (水) 23:06:08        [qwerty]
> > つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)
> だから仮にそんなことして1/2とか1/10とかになったとしても
> オーダN^2なんだからNが大きければほとんど意味ないんだって(;´Д`)

そういう人にはわかりやすいところで巡回セールスマン問題とか
手計算でやらせるのが手っ取り早くわかってもらえると思う(;´Д`)

参考:2009/05/27(水)23時04分27秒

>  2009/05/27 (水) 23:06:02        [qwerty]
> > だから仮にそんなことして1/2とか1/10とかになったとしても
> > オーダN^2なんだからNが大きければほとんど意味ないんだって(;´Д`)
> つかNの階乗じゃね?(;´Д`)

多分階乗オーダーだね(;´Д`)
N^2なら多項式オーダーだからアルゴリズム屋的に実はそんなに遅くない

参考:2009/05/27(水)23時05分18秒

>  2009/05/27 (水) 23:06:00        [qwerty]
> > すげえ難しいので総当りは無理だよという意味にほぼ等しい
> > 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> > 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> > ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> > ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる
> つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)

動的計画法すぎるな(;´Д`)

参考:2009/05/27(水)23時03分35秒

>  2009/05/27 (水) 23:05:53        [qwerty]
> > すげえ難しいので総当りは無理だよという意味にほぼ等しい
> > 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> > 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> > ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> > ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる
> つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)

彼の挙げた条件だと+-混交なので無理じゃね

参考:2009/05/27(水)23時03分35秒

>  2009/05/27 (水) 23:05:46        [qwerty]
> > つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)
> だから仮にそんなことして1/2とか1/10とかになったとしても
> オーダN^2なんだからNが大きければほとんど意味ないんだって(;´Д`)

でも今N=500なんじゃないの(;´Д`)固定値なら枝狩りの意味はあるじゃん

参考:2009/05/27(水)23時04分27秒

>  2009/05/27 (水) 23:05:37        [qwerty]
> > 別人だがこの問題にNP完全という言葉を持ち込む意味あるの?(;´Д`)
> すげえ難しいので総当りは無理だよという意味にほぼ等しい
> 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる

こういう場合は現実的な解を得るために遺伝的アルゴリズムとかニューロンモデルとかを使うと聞いた事があるよ(;´Д`)

参考:2009/05/27(水)23時01分47秒

>  2009/05/27 (水) 23:05:18        [qwerty]
> > つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)
> だから仮にそんなことして1/2とか1/10とかになったとしても
> オーダN^2なんだからNが大きければほとんど意味ないんだって(;´Д`)

つかNの階乗じゃね?(;´Д`)

参考:2009/05/27(水)23時04分27秒

>  2009/05/27 (水) 23:04:41        [qwerty]
> > すげえ難しいので総当りは無理だよという意味にほぼ等しい
> > 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> > 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> > ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> > ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる
> つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)

聞きだした条件なら十分総当たり出来ると思う(;´Д`)

参考:2009/05/27(水)23時03分35秒

>  2009/05/27 (水) 23:04:27        [qwerty]
> > すげえ難しいので総当りは無理だよという意味にほぼ等しい
> > 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> > 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> > ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> > ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる
> つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)

だから仮にそんなことして1/2とか1/10とかになったとしても
オーダN^2なんだからNが大きければほとんど意味ないんだって(;´Д`)

参考:2009/05/27(水)23時03分35秒

>  2009/05/27 (水) 23:03:35        [qwerty]
> > 別人だがこの問題にNP完全という言葉を持ち込む意味あるの?(;´Д`)
> すげえ難しいので総当りは無理だよという意味にほぼ等しい
> 一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
> 問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
> ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
> ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる

つかまずはソートかけて同じ数を弾いたり単体か二つ程度の組み合わせでもはみ出す数字を除外すればいいと思うよ(;´Д`)

参考:2009/05/27(水)23時01分47秒

>  2009/05/27 (水) 23:01:47        [qwerty]
> > 貴殿NP完全の意味わかってる?(;´Д`)
> 別人だがこの問題にNP完全という言葉を持ち込む意味あるの?(;´Д`)

すげえ難しいので総当りは無理だよという意味にほぼ等しい
一つの組み合わせを見つければ良いという話なら速く解ける可能性があるが
問題の性質上状態空間の総当りにならざるを得ないので多分膨大な時間がかかる
ここで「多分」と言ったのは「絶対に」時間がかかるという証明がなされていないから
ちなみにこの証明はP≠NP問題といわれてて解決に100万ドルの賞金がかかってる

参考:2009/05/27(水)22時56分26秒

>  2009/05/27 (水) 22:59:07        [qwerty]
> > 貴殿NP完全の意味わかってる?(;´Д`)
> 別人だがこの問題にNP完全という言葉を持ち込む意味あるの?(;´Д`)

総当りがナンセンスということを伝えるにはその一言で十分だからな

参考:2009/05/27(水)22時56分26秒

>  2009/05/27 (水) 22:58:41        [qwerty]
> > 犬猫鶏豚牛用医薬品(;´Д`)
> おいおい医薬品会社の営業マンがいるのか(;´Д`)やたら顔が良さそうだな

人間様のお薬じゃないから顔は関係ないよ(;´Д`)ファイザーの動薬担当者はかっこいいけど
昔は東芝とかも豚とか牛の医薬をやっていたんだが撤退しちゃったな

参考:2009/05/27(水)22時54分41秒

>  2009/05/27 (水) 22:56:26        [qwerty]
> > まあ合計いくらなんである合計数値を超えたら探索やめる、とかでもだいぶ減るだろうね(;´Д`)そのあたりは勝手に工夫してやってもらいたい
> 貴殿NP完全の意味わかってる?(;´Д`)

別人だがこの問題にNP完全という言葉を持ち込む意味あるの?(;´Д`)

参考:2009/05/27(水)22時52分18秒

>  2009/05/27 (水) 22:54:41        [qwerty]
> > 何を売るのか書けよ無能(;´Д`)
> 犬猫鶏豚牛用医薬品(;´Д`)

おいおい医薬品会社の営業マンがいるのか(;´Д`)やたら顔が良さそうだな

参考:2009/05/27(水)22時53分05秒

>  2009/05/27 (水) 22:53:45        [qwerty]
> > 何を売るのか書けよ無能(;´Д`)
> 犬猫鶏豚牛用医薬品(;´Д`)

インフルエンザ煽ればいいよ(;´Д`)

参考:2009/05/27(水)22時53分05秒

>  2009/05/27 (水) 22:53:17        [qwerty]
> > 工学博士の俺が来たよ
> > この問題は組み合わせ最適化問題の範疇に入ると思う
> > NP完全なのでどう頑張っても多項式オーダーで解くのは無理だよ
> だから数学的センスがあればかなり高速に改造できるけど
> なければ総当りで順番にやっていくことになる(;´Д`)

動的計画法の手法を使えばそれなりに速くなるけど
それでもメモリ量が無限でない限り多項式時間内には解けないな(;´Д`)
もし解けたらチューリング賞が取れるので俺にこっそり教えてくれ

参考:2009/05/27(水)22時50分23秒

>  2009/05/27 (水) 22:53:05        [qwerty]
> > いいなあ住人同士で問題を解決しあえて(;´Д`)
> > 今日課長から来た
> > 「本社から他支店の落ち込み分を東京支店に回すことになったので月曜までに自分の担当県の
> > 販促方法を考えてきてくれ」問題も解決してくれよう
> 何を売るのか書けよ無能(;´Д`)

犬猫鶏豚牛用医薬品(;´Д`)

参考:2009/05/27(水)22時51分17秒

>  2009/05/27 (水) 22:52:31        [qwerty]
> > ありがとうございます(;´Д`)これで宿題が終わりました
> いいなあ住人同士で問題を解決しあえて(;´Д`)
> 今日課長から来た
> 「本社から他支店の落ち込み分を東京支店に回すことになったので月曜までに自分の担当県の
> 販促方法を考えてきてくれ」問題も解決してくれよう

まあ面白ければかんがえてやらなくもないよ(;´Д`)

参考:2009/05/27(水)22時49分17秒

>  2009/05/27 (水) 22:52:18        [qwerty]
> > 工学博士の俺が来たよ
> > この問題は組み合わせ最適化問題の範疇に入ると思う
> > NP完全なのでどう頑張っても多項式オーダーで解くのは無理だよ
> まあ合計いくらなんである合計数値を超えたら探索やめる、とかでもだいぶ減るだろうね(;´Д`)そのあたりは勝手に工夫してやってもらいたい

貴殿NP完全の意味わかってる?(;´Д`)

参考:2009/05/27(水)22時49分55秒

>  2009/05/27 (水) 22:51:17        [qwerty]
> > ありがとうございます(;´Д`)これで宿題が終わりました
> いいなあ住人同士で問題を解決しあえて(;´Д`)
> 今日課長から来た
> 「本社から他支店の落ち込み分を東京支店に回すことになったので月曜までに自分の担当県の
> 販促方法を考えてきてくれ」問題も解決してくれよう

何を売るのか書けよ無能(;´Д`)

参考:2009/05/27(水)22時49分17秒

>  2009/05/27 (水) 22:50:23        [qwerty]
> > 
> > #include "stdafx.h"
> > #include <stdlib.h>
> > #include <string>
> > __int64 table[]={1,5,3,2,8,4,9,0,1,2,3,4,1,5,3,2,8,4,9,0,1,2,3,4};
> > int ntable = sizeof(table)/sizeof(__int64);
> > 
> > __int64 func( std::string &str, __int64 total, __int64 *tbl, int ntbl)
> > {
> >   for(int i=0;i<ntbl; ++i){ 
> > 	std::string s = str+",";
> > 	char buf[0x40];
> >         _ltoa_s((long)tbl[i],buf,0x40,10);
> >         s += buf;
> > 	if( total+tbl[i]==9){
> > 	  printf("みつけたよ(%s)\n", s.c_str());
> > 	} else {
> > 	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
> > 	}
> >   }
> >   return total;
> > }
> > int _tmain(int argc, _TCHAR* argv[])
> > {
> >    std::string str;
> >    func(str, 0, table, ntable);
> >  return 0;
> > }
> > とりあえずでかい数字を扱えるようにはしてみたが500個程度でも結構気が遠くなる時間がかかりそうな気がするな(;´Д`)
> 工学博士の俺が来たよ
> この問題は組み合わせ最適化問題の範疇に入ると思う
> NP完全なのでどう頑張っても多項式オーダーで解くのは無理だよ

だから数学的センスがあればかなり高速に改造できるけど
なければ総当りで順番にやっていくことになる(;´Д`)

参考:2009/05/27(水)22時48分04秒

>  2009/05/27 (水) 22:49:55        [qwerty]
> > 
> > #include "stdafx.h"
> > #include <stdlib.h>
> > #include <string>
> > __int64 table[]={1,5,3,2,8,4,9,0,1,2,3,4,1,5,3,2,8,4,9,0,1,2,3,4};
> > int ntable = sizeof(table)/sizeof(__int64);
> > 
> > __int64 func( std::string &str, __int64 total, __int64 *tbl, int ntbl)
> > {
> >   for(int i=0;i<ntbl; ++i){ 
> > 	std::string s = str+",";
> > 	char buf[0x40];
> >         _ltoa_s((long)tbl[i],buf,0x40,10);
> >         s += buf;
> > 	if( total+tbl[i]==9){
> > 	  printf("みつけたよ(%s)\n", s.c_str());
> > 	} else {
> > 	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
> > 	}
> >   }
> >   return total;
> > }
> > int _tmain(int argc, _TCHAR* argv[])
> > {
> >    std::string str;
> >    func(str, 0, table, ntable);
> >  return 0;
> > }
> > とりあえずでかい数字を扱えるようにはしてみたが500個程度でも結構気が遠くなる時間がかかりそうな気がするな(;´Д`)
> 工学博士の俺が来たよ
> この問題は組み合わせ最適化問題の範疇に入ると思う
> NP完全なのでどう頑張っても多項式オーダーで解くのは無理だよ

まあ合計いくらなんである合計数値を超えたら探索やめる、とかでもだいぶ減るだろうね(;´Д`)そのあたりは勝手に工夫してやってもらいたい

参考:2009/05/27(水)22時48分04秒

>  2009/05/27 (水) 22:49:17        [qwerty]
> > 
> > #include "stdafx.h"
> > #include <stdlib.h>
> > #include <string>
> > __int64 table[]={1,5,3,2,8,4,9,0,1,2,3,4,1,5,3,2,8,4,9,0,1,2,3,4};
> > int ntable = sizeof(table)/sizeof(__int64);
> > 
> > __int64 func( std::string &str, __int64 total, __int64 *tbl, int ntbl)
> > {
> >   for(int i=0;i<ntbl; ++i){ 
> > 	std::string s = str+",";
> > 	char buf[0x40];
> >         _ltoa_s((long)tbl[i],buf,0x40,10);
> >         s += buf;
> > 	if( total+tbl[i]==9){
> > 	  printf("みつけたよ(%s)\n", s.c_str());
> > 	} else {
> > 	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
> > 	}
> >   }
> >   return total;
> > }
> > int _tmain(int argc, _TCHAR* argv[])
> > {
> >    std::string str;
> >    func(str, 0, table, ntable);
> >  return 0;
> > }
> > とりあえずでかい数字を扱えるようにはしてみたが500個程度でも結構気が遠くなる時間がかかりそうな気がするな(;´Д`)
> ありがとうございます(;´Д`)これで宿題が終わりました

いいなあ住人同士で問題を解決しあえて(;´Д`)
今日課長から来た
「本社から他支店の落ち込み分を東京支店に回すことになったので月曜までに自分の担当県の
販促方法を考えてきてくれ」問題も解決してくれよう

参考:2009/05/27(水)22時46分40秒

>  2009/05/27 (水) 22:48:04        [qwerty]
> > ごめんなさい(;´Д`)1,2,3,3,4と4個であれば、1は一回のみ、3は2回使えます
> > 勿論数字は全て整数で0~500個までの個数があります
> 
> #include "stdafx.h"
> #include <stdlib.h>
> #include <string>
> __int64 table[]={1,5,3,2,8,4,9,0,1,2,3,4,1,5,3,2,8,4,9,0,1,2,3,4};
> int ntable = sizeof(table)/sizeof(__int64);
> 
> __int64 func( std::string &str, __int64 total, __int64 *tbl, int ntbl)
> {
>   for(int i=0;i<ntbl; ++i){ 
> 	std::string s = str+",";
> 	char buf[0x40];
>         _ltoa_s((long)tbl[i],buf,0x40,10);
>         s += buf;
> 	if( total+tbl[i]==9){
> 	  printf("みつけたよ(%s)\n", s.c_str());
> 	} else {
> 	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
> 	}
>   }
>   return total;
> }
> int _tmain(int argc, _TCHAR* argv[])
> {
>    std::string str;
>    func(str, 0, table, ntable);
>  return 0;
> }
> とりあえずでかい数字を扱えるようにはしてみたが500個程度でも結構気が遠くなる時間がかかりそうな気がするな(;´Д`)

工学博士の俺が来たよ
この問題は組み合わせ最適化問題の範疇に入ると思う
NP完全なのでどう頑張っても多項式オーダーで解くのは無理だよ

参考:2009/05/27(水)22時41分18秒

>  2009/05/27 (水) 22:46:40        [qwerty]
> > ごめんなさい(;´Д`)1,2,3,3,4と4個であれば、1は一回のみ、3は2回使えます
> > 勿論数字は全て整数で0~500個までの個数があります
> 
> #include "stdafx.h"
> #include <stdlib.h>
> #include <string>
> __int64 table[]={1,5,3,2,8,4,9,0,1,2,3,4,1,5,3,2,8,4,9,0,1,2,3,4};
> int ntable = sizeof(table)/sizeof(__int64);
> 
> __int64 func( std::string &str, __int64 total, __int64 *tbl, int ntbl)
> {
>   for(int i=0;i<ntbl; ++i){ 
> 	std::string s = str+",";
> 	char buf[0x40];
>         _ltoa_s((long)tbl[i],buf,0x40,10);
>         s += buf;
> 	if( total+tbl[i]==9){
> 	  printf("みつけたよ(%s)\n", s.c_str());
> 	} else {
> 	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
> 	}
>   }
>   return total;
> }
> int _tmain(int argc, _TCHAR* argv[])
> {
>    std::string str;
>    func(str, 0, table, ntable);
>  return 0;
> }
> とりあえずでかい数字を扱えるようにはしてみたが500個程度でも結構気が遠くなる時間がかかりそうな気がするな(;´Д`)

ありがとうございます(;´Д`)これで宿題が終わりました

参考:2009/05/27(水)22時41分18秒

>  2009/05/27 (水) 22:41:18        [qwerty]
> > 同じ数字を何度も使ってもいいんだよね?(;´Д`)もちろん整数だよね?500個ちょうど使うんだよね?
> ごめんなさい(;´Д`)1,2,3,3,4と4個であれば、1は一回のみ、3は2回使えます
> 勿論数字は全て整数で0~500個までの個数があります


#include "stdafx.h"
#include <stdlib.h>
#include <string>

__int64 table[]={1,5,3,2,8,4,9,0,1,2,3,4,1,5,3,2,8,4,9,0,1,2,3,4};
int ntable = sizeof(table)/sizeof(__int64);


__int64 func( std::string &str, __int64 total, __int64 *tbl, int ntbl)
{
  for(int i=0;i<ntbl; ++i){ 
	std::string s = str+",";
	char buf[0x40];
        _ltoa_s((long)tbl[i],buf,0x40,10);
        s += buf;
	if( total+tbl[i]==9){
	  printf("みつけたよ(%s)\n", s.c_str());
	} else {
	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
	}
  }
  return total;
}

int _tmain(int argc, _TCHAR* argv[])
{

   std::string str;
   func(str, 0, table, ntable);

 return 0;
}

とりあえずでかい数字を扱えるようにはしてみたが500個程度でも結構気が遠くなる時間がかかりそうな気がするな(;´Д`)

参考:2009/05/27(水)22時28分19秒

>  2009/05/27 (水) 22:39:56        [qwerty]
> > はい(;´Д`)
> でもそれって金額が同じものが存在しうるわけじゃん(;´Д`)そこのチェックどうするの

銀行に電話するか、ネットの口座にアクセスするしか現状ではない(;´Д`)

参考:2009/05/27(水)22時38分59秒

>  2009/05/27 (水) 22:38:59        [qwerty]
> > そんで取引件数の組み合わせ回数分必ず操作するわけね(;´Д`)
> はい(;´Д`)

でもそれって金額が同じものが存在しうるわけじゃん(;´Д`)そこのチェックどうするの

参考:2009/05/27(水)22時38分22秒

>  2009/05/27 (水) 22:38:22        [qwerty]
> > はい(;´Д`)
> そんで取引件数の組み合わせ回数分必ず操作するわけね(;´Д`)

はい(;´Д`)

参考:2009/05/27(水)22時36分29秒

>  2009/05/27 (水) 22:37:37        [qwerty]
> > 任意の現在値に一致する組み合わせが存在するかチェックするって事?(;´Д`)
> はい(;´Д`)

存在するかどうかなら500個以下の-5億から5億までの整数を組み合わせたら
-10億から10億の数字なんて95%以上の確率作れるだろ(;´Д`)

参考:2009/05/27(水)22時35分18秒

>  2009/05/27 (水) 22:36:29        [qwerty]
> > 任意の現在値に一致する組み合わせが存在するかチェックするって事?(;´Д`)
> はい(;´Д`)

そんで取引件数の組み合わせ回数分必ず操作するわけね(;´Д`)

参考:2009/05/27(水)22時35分18秒

>  2009/05/27 (水) 22:35:18        [qwerty]
> > 入金のみの口座だといいんですがプラスとマイナスの数字があるので
> > それがどの組み合わせなのかで一週間潰れるので…(;´Д`)
> 任意の現在値に一致する組み合わせが存在するかチェックするって事?(;´Д`)

はい(;´Д`)

参考:2009/05/27(水)22時34分09秒

>  2009/05/27 (水) 22:34:56        [qwerty]
> > ?(;´Д`)足せば?
> 入金のみの口座だといいんですがプラスとマイナスの数字があるので
> それがどの組み合わせなのかで一週間潰れるので…(;´Д`)

?(;´Д`)貴殿の好きなVBAかPerlで足し引きすれば?

参考:2009/05/27(水)22時32分50秒

>  2009/05/27 (水) 22:34:09        [qwerty]
> > ?(;´Д`)足せば?
> 入金のみの口座だといいんですがプラスとマイナスの数字があるので
> それがどの組み合わせなのかで一週間潰れるので…(;´Д`)

任意の現在値に一致する組み合わせが存在するかチェックするって事?(;´Д`)

参考:2009/05/27(水)22時32分50秒

>  2009/05/27 (水) 22:32:50        [qwerty]
> > そういやそうですね(;´Д`)使用目的としては当座預金の入出金明細の入力で
> > 記入漏れを見つけ出すために使うんですが電卓叩いたほうが早いかもしれないですね
> ?(;´Д`)足せば?

入金のみの口座だといいんですがプラスとマイナスの数字があるので
それがどの組み合わせなのかで一週間潰れるので…(;´Д`)

参考:2009/05/27(水)22時30分20秒

>  2009/05/27 (水) 22:32:14        [qwerty]
> > 馬鹿かお前
> > 10億から500この数字を任意に選んで組み合わせる組み合わせがいくつあると思ってるんだ?
> そういやそうですね(;´Д`)使用目的としては当座預金の入出金明細の入力で
> 記入漏れを見つけ出すために使うんですが電卓叩いたほうが早いかもしれないですね

元となるリストがあるなら
プログラムする場合でも総当たりする必要はないんじゃない(;´Д`)

参考:2009/05/27(水)22時26分59秒

>  2009/05/27 (水) 22:31:27        [qwerty]
> > 同じ数字を何度も使ってもいいんだよね?(;´Д`)もちろん整数だよね?500個ちょうど使うんだよね?
> ごめんなさい(;´Д`)1,2,3,3,4と4個であれば、1は一回のみ、3は2回使えます
> 勿論数字は全て整数で0~500個までの個数があります

いいから問題スキャンアプ(;´Д`)どうせ宿題だろ

参考:2009/05/27(水)22時28分19秒

>  2009/05/27 (水) 22:30:20        [qwerty]
> > 馬鹿かお前
> > 10億から500この数字を任意に選んで組み合わせる組み合わせがいくつあると思ってるんだ?
> そういやそうですね(;´Д`)使用目的としては当座預金の入出金明細の入力で
> 記入漏れを見つけ出すために使うんですが電卓叩いたほうが早いかもしれないですね

?(;´Д`)足せば?

参考:2009/05/27(水)22時26分59秒

>  2009/05/27 (水) 22:28:19        [qwerty]
> > 合計は-10億~10億、数字は-5億から+5億、組み合わせる数字の個数は500個です(;´Д`)
> 同じ数字を何度も使ってもいいんだよね?(;´Д`)もちろん整数だよね?500個ちょうど使うんだよね?

ごめんなさい(;´Д`)1,2,3,3,4と4個であれば、1は一回のみ、3は2回使えます
勿論数字は全て整数で0~500個までの個数があります

参考:2009/05/27(水)22時25分31秒

>  2009/05/27 (水) 22:26:59        [qwerty]
> > 合計は-10億~10億、数字は-5億から+5億、組み合わせる数字の個数は500個です(;´Д`)
> 馬鹿かお前
> 10億から500この数字を任意に選んで組み合わせる組み合わせがいくつあると思ってるんだ?

そういやそうですね(;´Д`)使用目的としては当座預金の入出金明細の入力で
記入漏れを見つけ出すために使うんですが電卓叩いたほうが早いかもしれないですね

参考:2009/05/27(水)22時23分41秒

>  2009/05/27 (水) 22:25:31        [qwerty]
> > 合計の下は?1から?1億から?(;´Д`)
> 合計は-10億~10億、数字は-5億から+5億、組み合わせる数字の個数は500個です(;´Д`)

同じ数字を何度も使ってもいいんだよね?(;´Д`)もちろん整数だよね?500個ちょうど使うんだよね?

参考:2009/05/27(水)22時22分47秒

>  2009/05/27 (水) 22:25:26        [qwerty]
> > Perlerだけどそんぐらい仕事ならてめえでやれって思った(;´Д`)
> これは数学的センスが必要だよ(;´Д`)一般的プログラマには総当りは作れても
> 動作をすばやくする方法はわからないと思う

奥村先生のアルゴリズム辞典とかは読んでて面白かった

参考:2009/05/27(水)22時19分22秒

>  2009/05/27 (水) 22:23:41        [qwerty]
> > 合計の下は?1から?1億から?(;´Д`)
> 合計は-10億~10億、数字は-5億から+5億、組み合わせる数字の個数は500個です(;´Д`)

馬鹿かお前
10億から500この数字を任意に選んで組み合わせる組み合わせがいくつあると思ってるんだ?

参考:2009/05/27(水)22時22分47秒

>  2009/05/27 (水) 22:22:47        [qwerty]
> > 合計は10億まで組み合わせる数字の個数は500個まで(;´Д`)
> 合計の下は?1から?1億から?(;´Д`)

合計は-10億~10億、数字は-5億から+5億、組み合わせる数字の個数は500個です(;´Д`)

参考:2009/05/27(水)22時21分26秒

>  2009/05/27 (水) 22:21:27        [qwerty]
> > 数字300個で試してみたのだが固まった(;´Д`)文句言ってごめんよ
> ああ、とりあえずなんで一桁しか考慮してないからな(;´Д`)だれか他にVBAとかパールのようなもので書いてくれるだろうと思ったんだが

是非COBOLでお願いします(;´Д`)

参考:2009/05/27(水)22時16分34秒

>  2009/05/27 (水) 22:21:26        [qwerty]
> > 100万桁とかも?(;´Д`)もっと条件出して狭めてくれないと困る
> 合計は10億まで組み合わせる数字の個数は500個まで(;´Д`)

合計の下は?1から?1億から?(;´Д`)

参考:2009/05/27(水)22時20分07秒

>  2009/05/27 (水) 22:21:23        [qwerty]
> > Perlerだけどそんぐらい仕事ならてめえでやれって思った(;´Д`)
> これは数学的センスが必要だよ(;´Д`)一般的プログラマには総当りは作れても
> 動作をすばやくする方法はわからないと思う

取り敢えず総当たりでつくってから時間が出来たら手法を探すよ(;´Д`)

参考:2009/05/27(水)22時19分22秒

>  2009/05/27 (水) 22:20:07        [qwerty]
> > 条件なしで全部探すんだよ(;´Д`)
> 100万桁とかも?(;´Д`)もっと条件出して狭めてくれないと困る

合計は10億まで組み合わせる数字の個数は500個まで(;´Д`)

参考:2009/05/27(水)22時19分21秒

>  2009/05/27 (水) 22:19:22        [qwerty]
> > ああ、とりあえずなんで一桁しか考慮してないからな(;´Д`)だれか他にVBAとかパールのようなもので書いてくれるだろうと思ったんだが
> Perlerだけどそんぐらい仕事ならてめえでやれって思った(;´Д`)

これは数学的センスが必要だよ(;´Д`)一般的プログラマには総当りは作れても
動作をすばやくする方法はわからないと思う

参考:2009/05/27(水)22時17分50秒

>  2009/05/27 (水) 22:19:21        [qwerty]
> > いやそうじゃなくてさ(;´Д`)貴殿が欲しい条件を出してくれよ
> 条件なしで全部探すんだよ(;´Д`)

100万桁とかも?(;´Д`)もっと条件出して狭めてくれないと困る

参考:2009/05/27(水)22時17分58秒

>  2009/05/27 (水) 22:19:03        [qwerty]
> > 数字300個で試してみたのだが固まった(;´Д`)文句言ってごめんよ
> ああ、とりあえずなんで一桁しか考慮してないからな(;´Д`)だれか他にVBAとかパールのようなもので書いてくれるだろうと思ったんだが

つーか正数だけじゃないのか(;´Д`)

参考:2009/05/27(水)22時16分34秒

>  2009/05/27 (水) 22:18:57        [qwerty]
> > いやそうじゃなくてさ(;´Д`)貴殿が欲しい条件を出してくれよ
> 条件なしで全部探すんだよ(;´Д`)

ああ、それによくみたら9が出力されていないな(;´Д`)

参考:2009/05/27(水)22時17分58秒

>  2009/05/27 (水) 22:17:58        [qwerty]
> > ご興味をお持ちですか暇つぶしにでも作っていただければ光栄です(;´Д`)
> > ・条件は各数字は一度ずつしか使わない
> >  (各数字に同じ数字が表れることがあればその場合は両方とも使える)
> > 他の条件は特に無くて、上記のように9も該当します(;´Д`)
> いやそうじゃなくてさ(;´Д`)貴殿が欲しい条件を出してくれよ

条件なしで全部探すんだよ(;´Д`)

参考:2009/05/27(水)22時16分43秒

>  2009/05/27 (水) 22:17:50        [qwerty]
> > 数字300個で試してみたのだが固まった(;´Д`)文句言ってごめんよ
> ああ、とりあえずなんで一桁しか考慮してないからな(;´Д`)だれか他にVBAとかパールのようなもので書いてくれるだろうと思ったんだが

Perlerだけどそんぐらい仕事ならてめえでやれって思った(;´Д`)

参考:2009/05/27(水)22時16分34秒

>  2009/05/27 (水) 22:17:11        [qwerty]
> > 数字300個で試してみたのだが固まった(;´Д`)文句言ってごめんよ
> ああ、とりあえずなんで一桁しか考慮してないからな(;´Д`)だれか他にVBAとかパールのようなもので書いてくれるだろうと思ったんだが

日本語で何やってるのか説明してくれよ
そうしたら漏れも書き直せるよ
C++とかよくわからん

参考:2009/05/27(水)22時16分34秒

>  2009/05/27 (水) 22:16:59        [qwerty]
> > http://krokus.sakura.ne.jp/topun/source/topun0259.jpg
> > いろいろ動くように直したよVC++用無料のでも動くだろうが(;´Д`)perlは簡便してください
> > #include "stdafx.h"
> > #include <stdlib.h>
> > #include <string>
> > int table[]={1,5,3,2,8,4,9};
> > int ntable = sizeof(table)/sizeof(int);
> > > > int func( std::string &str, int total, int *tbl, int ntbl)
> > {
> >   for(int i=0;i<ntbl-1; ++i){ 
> > 	std::string s = str+",";
> > 	char buf[0x10];
> >         _itoa_s(tbl[i],buf,0x10,10);
> >         s += buf;
> > 	if( total+tbl[i]==9){
> > 	  printf("みつけたよ(%s)\n", s.c_str());
> > 	} else {
> > 	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
> > 	}
> >   }
> >   return total;
> > }
> > int _tmain(int argc, _TCHAR* argv[])
> > {
> >    std::string str;
> >    func(str, 0, table, ntable);
> > > >  return 0;
> > }
> 数字300個で試してみたのだが固まった(;´Д`)文句言ってごめんよ

じゃあ俺がエクセルで

参考:2009/05/27(水)22時14分59秒

>  2009/05/27 (水) 22:16:43        [qwerty]
> > 1を使うとか条件無しで全部探すの?(;´Д`)詳しく説明して
> ご興味をお持ちですか暇つぶしにでも作っていただければ光栄です(;´Д`)
> ・条件は各数字は一度ずつしか使わない
>  (各数字に同じ数字が表れることがあればその場合は両方とも使える)
> 他の条件は特に無くて、上記のように9も該当します(;´Д`)

いやそうじゃなくてさ(;´Д`)貴殿が欲しい条件を出してくれよ


参考:2009/05/27(水)21時21分40秒

>  2009/05/27 (水) 22:16:34        [qwerty]
> > http://krokus.sakura.ne.jp/topun/source/topun0259.jpg
> > いろいろ動くように直したよVC++用無料のでも動くだろうが(;´Д`)perlは簡便してください
> > #include "stdafx.h"
> > #include <stdlib.h>
> > #include <string>
> > int table[]={1,5,3,2,8,4,9};
> > int ntable = sizeof(table)/sizeof(int);
> > 
> > int func( std::string &str, int total, int *tbl, int ntbl)
> > {
> >   for(int i=0;i<ntbl-1; ++i){ 
> > 	std::string s = str+",";
> > 	char buf[0x10];
> >         _itoa_s(tbl[i],buf,0x10,10);
> >         s += buf;
> > 	if( total+tbl[i]==9){
> > 	  printf("みつけたよ(%s)\n", s.c_str());
> > 	} else {
> > 	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
> > 	}
> >   }
> >   return total;
> > }
> > int _tmain(int argc, _TCHAR* argv[])
> > {
> >    std::string str;
> >    func(str, 0, table, ntable);
> > 
> >  return 0;
> > }
> 数字300個で試してみたのだが固まった(;´Д`)文句言ってごめんよ

ああ、とりあえずなんで一桁しか考慮してないからな(;´Д`)だれか他にVBAとかパールのようなもので書いてくれるだろうと思ったんだが

参考:2009/05/27(水)22時14分59秒

>  2009/05/27 (水) 22:14:59        [qwerty]
> > やっぱり住人はすごいな(;´Д`)Perlで書いてください
> http://krokus.sakura.ne.jp/topun/source/topun0259.jpg
> いろいろ動くように直したよVC++用無料のでも動くだろうが(;´Д`)perlは簡便してください
> #include "stdafx.h"
> #include <stdlib.h>
> #include <string>
> int table[]={1,5,3,2,8,4,9};
> int ntable = sizeof(table)/sizeof(int);
> 
> int func( std::string &str, int total, int *tbl, int ntbl)
> {
>   for(int i=0;i<ntbl-1; ++i){ 
> 	std::string s = str+",";
> 	char buf[0x10];
>         _itoa_s(tbl[i],buf,0x10,10);
>         s += buf;
> 	if( total+tbl[i]==9){
> 	  printf("みつけたよ(%s)\n", s.c_str());
> 	} else {
> 	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
> 	}
>   }
>   return total;
> }
> int _tmain(int argc, _TCHAR* argv[])
> {
>    std::string str;
>    func(str, 0, table, ntable);
> 
>  return 0;
> }

数字300個で試してみたのだが固まった(;´Д`)文句言ってごめんよ

参考:2009/05/27(水)22時04分18秒

>  2009/05/27 (水) 22:04:18        [qwerty]
> > C++ だとこんな感じかしら(;´Д`)動くかどうかしらん
> > #include <stdio.h>
> > #include <stirng>
> > int tbl[]={1,5,3,2,8,4,9};
> > int ntbl = sizeof(tbl)/sizeof(int);
> > 
> > int func( std::string &str, int total, int *tbl, int ntbl)
> > {
> >   int total = 0;
> >   for(int i=0;i<ntbl-1; ++i){ 
> > 	std::string s = str+",",itoa(tbl[i]);
> > 	if( total+tbl[i]==9){
> > 	  printf("みつけたよ(%s)\n", s.c_str());
> > 	} else {
> > 	  func( s, total+tbl[i], tbl[i+1], ntbl-i);
> > 	}
> >   }
> >   return total;
> > }
> > int main(int argc, char *argv[])
> > {
> >  for(int i=0;i<ntbl;++i){
> >    std::string str;
> >    func(str, 0, tbl[i], ntbl);
> >    }
> >  }
> > return 0;
> > }
> やっぱり住人はすごいな(;´Д`)Perlで書いてください

http://krokus.sakura.ne.jp/topun/source/topun0259.jpg
いろいろ動くように直したよVC++用無料のでも動くだろうが(;´Д`)perlは簡便してください

#include "stdafx.h"
#include <stdlib.h>
#include <string>

int table[]={1,5,3,2,8,4,9};
int ntable = sizeof(table)/sizeof(int);


int func( std::string &str, int total, int *tbl, int ntbl)
{
  for(int i=0;i<ntbl-1; ++i){ 
	std::string s = str+",";
	char buf[0x10];
        _itoa_s(tbl[i],buf,0x10,10);
        s += buf;
	if( total+tbl[i]==9){
	  printf("みつけたよ(%s)\n", s.c_str());
	} else {
	  func( s, total+tbl[i], &tbl[i+1], (ntbl-(i+1) ) );
	}
  }
  return total;
}

int _tmain(int argc, _TCHAR* argv[])
{

   std::string str;
   func(str, 0, table, ntable);


 return 0;
}

参考:2009/05/27(水)21時35分33秒

>  2009/05/27 (水) 21:35:33        [qwerty]
> > プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> > 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> > 探すプログラムをVBAで書くの難しい?
> > 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど
> C++ だとこんな感じかしら(;´Д`)動くかどうかしらん
> #include <stdio.h>
> #include <stirng>
> int tbl[]={1,5,3,2,8,4,9};
> int ntbl = sizeof(tbl)/sizeof(int);
> 
> int func( std::string &str, int total, int *tbl, int ntbl)
> {
>   int total = 0;
>   for(int i=0;i<ntbl-1; ++i){ 
> 	std::string s = str+",",itoa(tbl[i]);
> 	if( total+tbl[i]==9){
> 	  printf("みつけたよ(%s)\n", s.c_str());
> 	} else {
> 	  func( s, total+tbl[i], tbl[i+1], ntbl-i);
> 	}
>   }
>   return total;
> }
> int main(int argc, char *argv[])
> {
>  for(int i=0;i<ntbl;++i){
>    std::string str;
>    func(str, 0, tbl[i], ntbl);
>    }
>  }
> return 0;
> }

やっぱり住人はすごいな(;´Д`)Perlで書いてください

参考:2009/05/27(水)21時27分33秒

>  2009/05/27 (水) 21:30:44        [qwerty]
> > C++ だとこんな感じかしら(;´Д`)動くかどうかしらん
> > #include <stdio.h>
> > #include <stirng>
> > int tbl[]={1,5,3,2,8,4,9};
> > int ntbl = sizeof(tbl)/sizeof(int);
> > 
> > int func( std::string &str, int total, int *tbl, int ntbl)
> > {
> >   int total = 0;
> >   for(int i=0;i<ntbl-1; ++i){ 
> > 	std::string s = str+",",itoa(tbl[i]);
> > 	if( total+tbl[i]==9){
> > 	  printf("みつけたよ(%s)\n", s.c_str());
> > 	} else {
> > 	  func( s, total+tbl[i], tbl[i+1], ntbl-i);
> > 	}
> >   }
> >   return total;
> > }
> > int main(int argc, char *argv[])
> > {
> >  for(int i=0;i<ntbl;++i){
> >    std::string str;
> >    func(str, 0, tbl[i], ntbl);
> >    }
> >  }
> > return 0;
> > }
> これじゃコンパイルできないな(;´Д`)

ああ(;´Д`)
http://codepad.org/ozvfjMrN

参考:2009/05/27(水)21時29分33秒

>  2009/05/27 (水) 21:29:33        [qwerty]
> > プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> > 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> > 探すプログラムをVBAで書くの難しい?
> > 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど
> C++ だとこんな感じかしら(;´Д`)動くかどうかしらん
> #include <stdio.h>
> #include <stirng>
> int tbl[]={1,5,3,2,8,4,9};
> int ntbl = sizeof(tbl)/sizeof(int);
> 
> int func( std::string &str, int total, int *tbl, int ntbl)
> {
>   int total = 0;
>   for(int i=0;i<ntbl-1; ++i){ 
> 	std::string s = str+",",itoa(tbl[i]);
> 	if( total+tbl[i]==9){
> 	  printf("みつけたよ(%s)\n", s.c_str());
> 	} else {
> 	  func( s, total+tbl[i], tbl[i+1], ntbl-i);
> 	}
>   }
>   return total;
> }
> int main(int argc, char *argv[])
> {
>  for(int i=0;i<ntbl;++i){
>    std::string str;
>    func(str, 0, tbl[i], ntbl);
>    }
>  }
> return 0;
> }

これじゃコンパイルできないな(;´Д`)

参考:2009/05/27(水)21時27分33秒

>  2009/05/27 (水) 21:29:02        [qwerty]
> > プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> > 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> > 探すプログラムをVBAで書くの難しい?
> > 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど
> C++ だとこんな感じかしら(;´Д`)動くかどうかしらん
> #include <stdio.h>
> #include <stirng>
> int tbl[]={1,5,3,2,8,4,9};
> int ntbl = sizeof(tbl)/sizeof(int);
> 
> int func( std::string &str, int total, int *tbl, int ntbl)
> {
>   int total = 0;
>   for(int i=0;i<ntbl-1; ++i){ 
> 	std::string s = str+",",itoa(tbl[i]);
> 	if( total+tbl[i]==9){
> 	  printf("みつけたよ(%s)\n", s.c_str());
> 	} else {
> 	  func( s, total+tbl[i], tbl[i+1], ntbl-i);
> 	}
>   }
>   return total;
> }
> int main(int argc, char *argv[])
> {
>  for(int i=0;i<ntbl;++i){
>    std::string str;
>    func(str, 0, tbl[i], ntbl);
>    }
>  }
> return 0;
> }

std::next_permutation使えよ

参考:2009/05/27(水)21時27分33秒

>  2009/05/27 (水) 21:28:08        [qwerty]
> > プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> > 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> > 探すプログラムをVBAで書くの難しい?
> > 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど
> C++ だとこんな感じかしら(;´Д`)動くかどうかしらん
> #include <stdio.h>
> #include <stirng>
> int tbl[]={1,5,3,2,8,4,9};
> int ntbl = sizeof(tbl)/sizeof(int);
> 
> int func( std::string &str, int total, int *tbl, int ntbl)
> {
>   int total = 0;
>   for(int i=0;i<ntbl-1; ++i){ 
> 	std::string s = str+",",itoa(tbl[i]);
> 	if( total+tbl[i]==9){
> 	  printf("みつけたよ(%s)\n", s.c_str());
> 	} else {
> 	  func( s, total+tbl[i], tbl[i+1], ntbl-i);
> 	}
>   }
>   return total;
> }
> int main(int argc, char *argv[])
> {
>  for(int i=0;i<ntbl;++i){
>    std::string str;
>    func(str, 0, tbl[i], ntbl);
>    }
>  }
> return 0;
> }

Cで書いてくれ

参考:2009/05/27(水)21時27分33秒

>  2009/05/27 (水) 21:27:33        [qwerty]
> プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> 探すプログラムをVBAで書くの難しい?
> 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど

C++ だとこんな感じかしら(;´Д`)動くかどうかしらん

#include <stdio.h>
#include <stirng>

int tbl[]={1,5,3,2,8,4,9};
int ntbl = sizeof(tbl)/sizeof(int);


int func( std::string &str, int total, int *tbl, int ntbl)
{
  int total = 0;
  for(int i=0;i<ntbl-1; ++i){ 
	std::string s = str+",",itoa(tbl[i]);
	if( total+tbl[i]==9){
	  printf("みつけたよ(%s)\n", s.c_str());
	} else {
	  func( s, total+tbl[i], tbl[i+1], ntbl-i);
	}
  }
  return total;
}

int main(int argc, char *argv[])
{
 for(int i=0;i<ntbl;++i){
   std::string str;
   func(str, 0, tbl[i], ntbl);
   }

 }

return 0;
}

参考:2009/05/27(水)20時49分37秒

>  2009/05/27 (水) 21:21:40        [qwerty]
> > プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> > 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> > 探すプログラムをVBAで書くの難しい?
> > 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど
> 1を使うとか条件無しで全部探すの?(;´Д`)詳しく説明して

ご興味をお持ちですか暇つぶしにでも作っていただければ光栄です(;´Д`)
・条件は各数字は一度ずつしか使わない
 (各数字に同じ数字が表れることがあればその場合は両方とも使える)
他の条件は特に無くて、上記のように9も該当します(;´Д`)

参考:2009/05/27(水)21時12分23秒

>  2009/05/27 (水) 21:12:23        [qwerty]
> プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> 探すプログラムをVBAで書くの難しい?
> 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど

1を使うとか条件無しで全部探すの?(;´Д`)詳しく説明して

参考:2009/05/27(水)20時49分37秒

>  2009/05/27 (水) 21:10:11        [qwerty]
> > 実際に使う数字の個数は300個前後の4桁~8桁の数で、合計額は億単位なので
> > 全部の組み合わせを書き出すのは無謀なんです(;´Д`)
> 作ろうと持ったが意外とめんどくさいな(;´Д`)

部分和の問題は数学的にも凄く難しい問題だからな

参考:2009/05/27(水)21時06分10秒

>  2009/05/27 (水) 21:06:10        [qwerty]
> > 全部の組み合わせを書き出せ
> 実際に使う数字の個数は300個前後の4桁~8桁の数で、合計額は億単位なので
> 全部の組み合わせを書き出すのは無謀なんです(;´Д`)

作ろうと持ったが意外とめんどくさいな(;´Д`)

参考:2009/05/27(水)21時00分22秒

>  2009/05/27 (水) 21:05:02        [qwerty]
> > 実際に使う数字の個数は300個前後の4桁~8桁の数で、合計額は億単位なので
> > 全部の組み合わせを書き出すのは無謀なんです(;´Д`)
> じゃあきらめなさい

諦めました(;´Д`)

参考:2009/05/27(水)21時03分50秒

>  2009/05/27 (水) 21:03:50        [qwerty]
> > 全部の組み合わせを書き出せ
> 実際に使う数字の個数は300個前後の4桁~8桁の数で、合計額は億単位なので
> 全部の組み合わせを書き出すのは無謀なんです(;´Д`)

じゃあきらめなさい

参考:2009/05/27(水)21時00分22秒

>  2009/05/27 (水) 21:00:22        [qwerty]
> > プログラム書いてくれたらリンクのAmazonで1万円以上購入して貢献するから
> > なんとか書いてくれないかい?(;´Д`)1,5,3...と合計は可変がいいです
> 全部の組み合わせを書き出せ

実際に使う数字の個数は300個前後の4桁~8桁の数で、合計額は億単位なので
全部の組み合わせを書き出すのは無謀なんです(;´Д`)

参考:2009/05/27(水)20時58分31秒

>  2009/05/27 (水) 20:59:57        [qwerty]
> > 時間かけていいなら総当りするだけなんで楽勝(;´Д`)
> プログラム書いてくれたらリンクのAmazonで1万円以上購入して貢献するから
> なんとか書いてくれないかい?(;´Д`)1,5,3...と合計は可変がいいです

DVD-Rにぶち込むRARの組み合わせを探索するプログラムだな!(;`Д´)

参考:2009/05/27(水)20時54分49秒

>  2009/05/27 (水) 20:58:31        [qwerty]
> > 時間かけていいなら総当りするだけなんで楽勝(;´Д`)
> プログラム書いてくれたらリンクのAmazonで1万円以上購入して貢献するから
> なんとか書いてくれないかい?(;´Д`)1,5,3...と合計は可変がいいです

全部の組み合わせを書き出せ

参考:2009/05/27(水)20時54分49秒

>  2009/05/27 (水) 20:54:49        [qwerty]
> > プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> > 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> > 探すプログラムをVBAで書くの難しい?
> > 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど
> 時間かけていいなら総当りするだけなんで楽勝(;´Д`)

プログラム書いてくれたらリンクのAmazonで1万円以上購入して貢献するから
なんとか書いてくれないかい?(;´Д`)1,5,3...と合計は可変がいいです

参考:2009/05/27(水)20時50分58秒

>  2009/05/27 (水) 20:54:47        [qwerty]
> > 自己レスまちがえた恥ずかしい(;´Д`)
> 大丈夫(;´Д`)俺はまったく意味がわからなかったから

無縁ループ(;´Д`)

参考:2009/05/27(水)20時54分15秒

>  2009/05/27 (水) 20:54:41        [qwerty]
> > 自己レスまちがえた恥ずかしい(;´Д`)
> 大丈夫(;´Д`)俺はまったく意味がわからなかったから

ミツケタゾではなくミツケタワヨが正解

参考:2009/05/27(水)20時54分15秒

>  2009/05/27 (水) 20:54:30        [qwerty]
> > 時間かけていいなら総当りするだけなんで楽勝(;´Д`)
> 10 if int(rnd(0)*9)+1 = int(rnd(0)*9)+1 then print "ミツケタゾ"
> 20 goto 10

ジョゼー

参考:2009/05/27(水)20時52分38秒

>  2009/05/27 (水) 20:54:15        [qwerty]
> > 10 if int(rnd(0)*9)+1 = int(rnd(0)*9)+1 then print "ミツケタゾ"
> > 20 goto 10
> 自己レスまちがえた恥ずかしい(;´Д`)

大丈夫(;´Д`)俺はまったく意味がわからなかったから

参考:2009/05/27(水)20時53分03秒

>  2009/05/27 (水) 20:53:03        [qwerty]
> > 時間かけていいなら総当りするだけなんで楽勝(;´Д`)
> 10 if int(rnd(0)*9)+1 = int(rnd(0)*9)+1 then print "ミツケタゾ"
> 20 goto 10

自己レスまちがえた恥ずかしい(;´Д`)

参考:2009/05/27(水)20時52分38秒

>  2009/05/27 (水) 20:52:38        [qwerty]
> > プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> > 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> > 探すプログラムをVBAで書くの難しい?
> > 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど
> 時間かけていいなら総当りするだけなんで楽勝(;´Д`)

10 if int(rnd(0)*9)+1 = int(rnd(0)*9)+1 then print "ミツケタゾ"
20 goto 10

参考:2009/05/27(水)20時50分58秒

>  2009/05/27 (水) 20:51:56        [qwerty]
> プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> 探すプログラムをVBAで書くの難しい?
> 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど

答えがわかってるならプログラムする必要ないじゃん

参考:2009/05/27(水)20時49分37秒

>  2009/05/27 (水) 20:50:58        [qwerty]
> プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> 探すプログラムをVBAで書くの難しい?
> 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど

VBAはよくわからんので
CとかJavaならそんな難しくは無いと思うよ(;´Д`)

参考:2009/05/27(水)20時49分37秒

>  2009/05/27 (水) 20:50:58        [qwerty]
> プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
> 1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
> 探すプログラムをVBAで書くの難しい?
> 答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど

時間かけていいなら総当りするだけなんで楽勝(;´Д`)

参考:2009/05/27(水)20時49分37秒

2009/05/27 (水) 20:49:37        [qwerty]
プログラムの得意な貴殿らに聞きたいんだけど(;´Д`)
1,5,3,2,8,4,9という数字が与えられて合計9になる組み合わせを
探すプログラムをVBAで書くの難しい?
答えは(1,5,3)(1,8)(5,4)(3,2,4)(1,8)(9)の5通りなんだけど

上へ