どなたか助けてください(フローチャート) [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
初めまして。
マルバツゲームで後手が絶対に負けないフローチャートという宿題をもらいました。
どなたか解る方、助けてください。
すみませんが、よろしくお願いします。 先手がまず真ん中に○描くだろ?
んであとは阻止し続けるだけじゃん。 >>2様
考え方は分かるのですが、いざフローチャートに表すとするとどう書けばいいのか分からなくて・・
申し訳ございません。 まず、各マスに番号を付ける。例えば、左上のマスの番号をゼロとし、上中央のマスを1とする。
右上のマスを2とし、左中央のマスを3とし、中央のマスを4とする。
全部で9個のマスの状態を表すのに整数配列を使う。
例えば、配列の要素がゼロなら空で、1なら丸とし、2ならバツとする。 ややこしいのは勝ち負けの判定だが、規則的に順番に、
マスがそろう場合のすべての組合せを考えることになる。
判定はサブルーチンであることが好ましい。 一般に、先手後手にかかわらず、「最善の手」を選べば引き分け
以上の結果が得られることが知られている。 先手の一手目は、9パターンあるけど、回転反転の対称性をかんがえれば、
角、真ん中、辺の中央、の3種類にoを置く位置は絞れる。
012
345
678
場所を上記番号で表せば、
0, 1, 4 の3状態。
この、3つの状態のそれぞれについて、後手がxを置き得る場所を考える。
いずれも8箇所空いているから、さらに8分岐する。先程と同じように、対称性を踏まえて、絞り込む。
例えば、先手が0ならば、後手は、
0-1
0-2
0-3 -> 0-1と同等
0-4
0-5
0-6 -> 0-2 と同等
0-7 -> 0-5 と同等
0-8
で、後手は、1,2,4,5,8の5通りを考えればよい。
フローチャートは、先手0から、後手1 2 4 5 8に分岐したものになる。
先手1、先手4についても同様に分岐させる。
次に、再度、分岐後の各状態について、先手が取り得る場所を考え、分岐させる。
さらに、分岐後の状態について、後手の取り得る場所で分岐させる、、、
これを繰り返していくと、先手の勝ちで終わるパターンが出てくる。先手の勝ちに繋がる一歩手前の後手の手を候補から消す。
これを繰り返していき、引き分けor後手勝利のみとなれば、後手の必勝法フローチャートの完成。 まず最初に
「後出しジャンケン」でかならず勝つ方法のフロー
を書けるかどうか
それが出来ないなら帰れというしかない 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
w 自然数m、nに対して、mのn乗を計算する効率の良いアルゴリズムを流れ図(flow chart)で記述せよ。
ヒント:例えばn=64の時、乗算の回数は6回で済む。
誰か、数学の知識も想像力も乏しい私のような素人でも、わかりやすいようにバシッと答えてくだされ。
ちなみにアルゴリズムやフローチャートの基礎的な教科書の最初の方で出る問題なので、小難しい式やプログラミング言語的なものは使わないようです。 nを n以下の2のべき乗np と あまりnr に分解
result←m
log2( np )回result←result*result
nr回result←result*m log2( np )は分解するときに副産物?として得られる それじゃ 63 あたりだと無駄が多すぎ
こんな感じで
long double myPower(long double x, unsigned int n, int* cnt)
{
if (n & 1) {
if (n - 1 == 0) {
return x;
} else {
(*cnt)++;
return x * myPower(x, n - 1, cnt);
}
} else {
(*cnt)++;
return myPower(x * x, n / 2, cnt);
}
} 自然数nを一つ入力し、各 i = 1、2、・・・・・、nについて、1/1から1/iまでの和(Si=1/1+1/2+・・・・・+1/i)の値を以下のように出力する
1/1=1.000
1/1+1/2=1.500
1/1+1/2+1/3=1.833
・
・
・
1/1+1/2+・・・・・+1/i=○.○○○
これを擬似言語で書けって問題 void main()
{
int N=10;
double sum;
for(int n=1;n<=10;n++){
sum=0;
for(int i=1;i<=n;i++){
sum+=1.0/i;
if(i<n)
printf("1/%d+",i);
else
printf("1/%d",n);
}
printf("=%.3f\n",sum);
}
} ああ、10のところをNに変えろ。
そんなもん、分かるだろ?
一々書くなよ、馬鹿。 おぉ!ありがとうございました。
あとは、これを擬似言語で書くスキルがあるかですなw フローチャート書かせるくせにプログラミングレスですとか宣うツール死んでほしい 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
BKF4A ■ このスレッドは過去ログ倉庫に格納されています