1 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:16:00 ] 他人のソースを読むことは非常に勉強になります。 と言うわけで、初心者〜プロの方まで様々な人が書いたソースを見て、より良いプログラムを作れるようになろうと言う目論見です。 問題は未来アンカーで踏んだ人が空気を読んだ問題を出しましょう。 解答ソースを貼る人用テンプレ 【C言語歴】 (例)4年 【レベル】 (例)初心者、プロ、学校で習った程度 など 【コンセプト】 (例)処理速度重視、可読性重視、容量重視 など 【コメント】 (例)みっくみくにしてやんよ。など、有れば 長すぎるソースはこちらへ ttp://codepad.org/ 宿題は C/C++の宿題片付けます 130代目へ pc12.2ch.net/test/read.cgi/tech/1250204272/ 相談は C言語なら俺に聞け(入門篇)Part54などへ pc12.2ch.net/test/read.cgi/tech/1254829314/
129 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 01:44:05 ] 適当に作ったので面白いかどうかはしらないけれど こんな感じの問題名、解答時間、難易度つきテンプレ希望
130 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 09:17:18 ] できたが、俺にはAA作りの才能がないことが分かったのと、codepadじゃ時間取得系関数動かねぇ。 codepad.org/E9sGRiit ローカルでの実行結果。 ○●○○●●●○○○○○○●○○○●● ●○●○●○●○○●○○●●○○●○○ ●○●○●●●○○○○○○●○○●●● ●○●○○○●○○●○○○●○○●○● ○●○○●●○○○○○○●●●○●●●
131 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 09:37:15 ] >>129 所要時間: 25分 感想: 文字盤を作るのが面倒…orz 問題の品質: △(文字盤を作るのがメインになってしまうので…) #include <stdio.h> #include <time.h> #define artrow 5 #define artcol 7 int main() { int i, j, idx[artrow]; time_t timer; struct tm *t_st; char art[][artrow][artcol] = { { "○●○", "●○●", "●○●", "●○●", "○●○", }, { "○○●", "○○●", "○○●", "○○●", "○○●", }, { "●●○", "○○●", "○●●", "●○○", "●●●", }, { "●●○", "○○●", "●●○", "○○●", "●●○", }, { "●○●", "●○●", "●●●", "○○●", "○○●", }, { "●●●", "●○○", "●●●", "○○●", "●●○", }, { "○●●", "●○○", "●●●", "●○●", "●●●", }, { "●●●", "○○●", "○○●", "○●○", "●○○", }, { "●●●", "●○●", "●●●", "●○●", "●●●", }, { "●●●", "●○●", "●●●", "○○●", "●●○", }, { "○○○", "○●○", "○○○", "○●○", "○○○", }, }; time(&timer); t_st = localtime(&timer); idx[0] = t_st->tm_hour / 10; idx[1] = t_st->tm_hour % 10; idx[2] = 10; idx[3] = t_st->tm_min /10 ; idx[4] = t_st->tm_min % 10; for( i=0; i<artrow; i++ ) for( j=0; j<5; j++ ) printf( "%s%s", art[idx[j]][i], j == 4 ? "\n" : "○" ); return 0; }
132 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 09:46:00 ] ○があると読みにくいので スペースに置き換えてください ずれないように注意出来たら二段
133 名前:130 mailto:sage [2010/04/24(土) 10:10:14 ] うげぇ、配列サイズ足りてねぇorz
134 名前:131 mailto:sage [2010/04/24(土) 11:20:02 ] 変数名等、全体の見通しを良くして、さらにAAを>>130 から借用。 #include <stdio.h> #include <time.h> #define FIELD_ROW_SIZE 5 #define FIELD_COL_SIZE 5 #define ART_KIND_COUNT 11 #define COLON_IDX 10 int main() { int row, idx, cols[FIELD_COL_SIZE]; time_t timer; struct tm *t_st; char *art_ptr[FIELD_ROW_SIZE][ART_KIND_COUNT] = { { "○●○", "○●○", "●●○", "●●○", "●○●", "●●●", "○●●", "●●●", "●●●", "●●●", "○○○" }, { "●○●", "●●○", "○○●", "○○●", "●○●", "●○○", "●○○", "●○●", "●○●", "●○●", "○●○" }, { "●○●", "○●○", "○●●", "●●○", "●●●", "●●○", "●●●", "○○●", "○●○", "●●●", "○○○" }, { "●○●", "○●○", "●○○", "○○●", "○○●", "○○●", "●○●", "○○●", "●○●", "○○●", "○●○" }, { "○●○", "●●●", "●●●", "●●○", "○○●", "●●○", "●●●", "○○●", "●●●", "●●○", "○○○" }, }, *field_sep[FIELD_COL_SIZE] = { "○", "○", "○", "○", "\n"} ; time(&timer); t_st = localtime(&timer); cols[0] = t_st->tm_hour / 10; cols[1] = t_st->tm_hour % 10; cols[2] = COLON_IDX; cols[3] = t_st->tm_min / 10; cols[4] = t_st->tm_min % 10; for( row=0; row<FIELD_ROW_SIZE; row++ ) for( idx=0; idx<FIELD_COL_SIZE; idx++ ) printf( "%s%s", art_ptr[row][cols[idx]], field_sep[idx] ); return 0; }
135 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 13:58:53 ] // UTF-8 SJIS EUC 対応してたらちょっと時間掛かった #include <stdio.h> #include <time.h> #define COLON_IDX 10 #define DOT "●" char *cout(char *b, unsigned int s, int n, int r){ unsigned short art[] = { 0x56d4, 0xe934, 0xe746, 0x71c6, 0x93da, 0x719e, 0xf79c, 0x925e, 0xf55e, 0x73de, 0x0820 }; unsigned short i, j, c, d; --s; for(i = 0, c = art[n]; i < r; ++i) c >>= 3; for(i = 0; i < 3 * s; i += s) for(j = 0, d = (c >>= 1); j < s; ++j) b[i + j] = d & 1 ? "●"[j] : "○"[j]; b[i] = 0; return b; } int main(int ac, char **av){ time_t timer; struct tm *t; char b[sizeof(DOT) * 3]; int i; time(&timer); t = localtime(&timer); for(i = 0; i < 5; ++i){ printf("%s○", cout(b, sizeof(DOT), t->tm_hour / 10, i)); printf("%s○", cout(b, sizeof(DOT), t->tm_hour % 10, i)); printf("%s○", cout(b, sizeof(DOT), COLON_IDX, i)); printf("%s○", cout(b, sizeof(DOT), t->tm_min / 10, i)); printf("%s\n", cout(b, sizeof(DOT), t->tm_min % 10, i)); } return 0; }
136 名前:デフォルトの名無しさん [2010/04/24(土) 14:12:24 ] www2.ezbbs.net/24/techside/img/1266584278_1.jpg このパズルを解くプログラム
137 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 14:19:04 ] >>136 すまんがシラミツブシは興味ないんよ それより論理的にさ ここに1を置いたら絶対全部の合計は等しく出来ないから 1はこっちかこっちにしか置けない っていう風に考えたい訳
138 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 16:38:16 ] >>136 程度だと総当たりでも十分速いだろなぁ。 それ書くくらいならナンプレの答え探すプログラムの方がいいんじゃね?
139 名前:デフォルトの名無しさん [2010/04/24(土) 18:04:37 ] >>136 がわからない なにこれどうすんの?
140 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 18:33:55 ] 総和が5の倍数であることを利用するとあまる数字の組み合わせを何個かに限定できるかな
141 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 18:49:23 ] 1~10の総和は55 和がすべて等しいので 和の値は55/5=11 4個の和で11になる組み合わせを選ぶ
142 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 18:59:23 ] え?
143 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 19:04:15 ] >>141 それで解けたら1億やるよw
144 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 19:09:01 ] >>141 でやるとかむずいな
145 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 19:10:17 ] むずいとかじゃなくて、解がない
146 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 19:18:42 ] 4個の和が11じゃねーだろw 全ての位置は2回数えられるから2倍にして4個の和が22になる組み合わせを選ぶ。 まあ、それでも解はないんだけどねw
147 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 19:22:28 ] >>136 7-11いい気分
148 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 19:26:21 ] >>147 プログラムお願いします
149 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 19:27:16 ] 宿題スレのでも見とけ
150 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 19:55:56 ] 数学の問題にも著作権はあるんだからパクリはいくない
151 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 23:22:00 ] 問題 ジョーカーを除いたトランプ1組(52枚)で下記のルールで神経衰弱を行った場合、 最大何手必要なのかを求めるプログラム。 ※但しコンピュータは最善の手を実行するものとする。 1. 52枚を適当にシャッフルしカードを伏せる(ことにする) 2. カードを2枚めくる(この行為を1手と数える) 2-1. 同じ数字であれば表にする(ことにする) 2-2. 異なる数字であれば、それらの数字を覚えて裏に戻す(ことにする) 3. 全てのカードが表になった(ことになった)ら終了
152 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 23:51:13 ] >>151 それも数学の問題。プログラミングできないなら無理に出題しないでいいよ。 答えは全てのカードを覚えるのにかかる回数26回と 全てのカードを取るのにかかる回数26回の合わせて52回。
153 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 00:02:36 ] >>152 不正解 覚えるのは25回で十分
154 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 00:16:41 ] いや26回だ
155 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 00:21:08 ] >>154 指摘してやってるのに分からんいなんてアホなのか? 25回覚えて、取り始めは、残った2枚のうちの1枚から始めれば良い。 (1枚取った時点で全てのカードが把握できる)
156 名前:152 mailto:sage [2010/04/25(日) 00:31:34 ] >>155 言われみればそうだね。でも154はおれじゃねえ。
157 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 00:44:56 ] いや合わせて50回だ
158 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 00:50:12 ] そうだorz
159 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 00:51:41 ] >>157 >いや合わせて50回だ 何を合わせるんだ?
160 名前:157 mailto:sage [2010/04/25(日) 01:23:37 ] 最大40手 50回は間違い
161 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 01:24:10 ] 最大52回
162 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 01:32:21 ] ↓の26回を2回繰り返す A-2 3-4 5-6 7-8 9-10 J-Q K-A A-A 2-3 2-2 3-3 4-5 4-4 5-5 6-7 6-6 7-7 8-9 8-8 9-9 10-J 10-10 J-J Q-K Q-Q K-K
163 名前:157 mailto:sage [2010/04/25(日) 02:07:42 ] A_1-A_2 A_3-A_4 A_5-A_6 A_7-A_8 A_9-A10 A11-A12 A13-B_1 C_1-D_1 B_2-B_3 C_2-D_2 C_3-D_3 B_4-B_5 C_4-D_4 C_5-D_5 B_6-B_7 C_6-D_6 C_7-D_7 B_8-B_9 C_8-D_8 C_9-D_9 B10-B11 C10-D10 C11-D11 B12-B13 C12-D12 C13-D13 26回中、終わった数は次の13回 C_1-D_1 C_2-D_2 C_3-D_3 C_4-D_4 C_5-D_5 C_6-D_6 C_7-D_7 C_8-D_8 C_9-D_9 C10-D10 C11-D11 C12-D12 C13-D13 ここまでで、A_1からA13 の位置が全て分かっている。 ここまでで、B_1からB13 の位置が全て分かっている。 ここまでで、C_1からC13 の位置が全て分かっている。 ここまでで、D_1からD13 の位置が全て分かっている。 まだ出ていないのは、ない。 残っているのは13回。合計39回。 ↓の20回を2回繰り返す A_1-A_2 A_3-A_4 A_5-A_6 A_7-A_8 A_9-A10 A11-A12 A13-B_1 A_1-B_1 B_2-A_2 B_3-A_3 B_4-A_4 B_5-A_5 B_6-A_6 B_7-A_7 B_8-A_8 B_9-A_9 B10-A10 B11-A11 B12-A12 B13-A13 …
164 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 04:07:54 ] 1と2だけの8枚のとき6回、1と2と3だけの12枚のとき10回だから、52枚なら50回が正解
165 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 06:15:43 ] なかなか難しいなw 結局何手が正しいのかわからないが、ネットワーク対戦とか少し面白そうと思ってしまったww
166 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 07:51:20 ] 方法はともかく、トランプの持つ情報量考えたら下限は見えてくるんじゃないかなぁ。 トランプの並べ方は52!/(4!^13) = 249987600 (27.897 bit) けど、引いたカードをどう考えればいいんだろう。 最初は1/13の確率で引くカードを予言できるから、1枚引くと3.7 bit得られることになるんだが、 2枚目以降は引くカードによって得られる情報量が変わってくる。
167 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 08:47:00 ] 分かった。正解は39回だ。 各々の数に対して、丁度半分の2枚づつの情報が分かればOK。 1枚目は必ず知らない情報のカードをめくる。 そのカードの数の情報が1枚以下しか出てない場合、次に引くカードは知らない情報のカード。 2枚分かっていれば、分かっているカード組み合わせて表にしておく。 これを繰り返していけば、最悪、39回で全てのカードを表にできる。
168 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 08:55:56 ] >>167 A-2 A-2 3-A 3-A 4-2 4-2 5-3 5-3 6-4 6-4 7-5 7-5 8-6 8-6 9-7 9-7 10-8 10-8 J-9 J-9 Q-10 Q-10 K-J K-J 最初から24手目までこういう風に出たら?
169 名前:167 mailto:sage [2010/04/25(日) 09:05:18 ] 何か少しだけ違う気がするな。 数の種類が奇数だと、+1回になりそうな気もするし、 >>155 と組み合わせられる気もするし 無理やり取ってしまえば、上手く行きそうな気もする…。 細かいところまでは分からんが、正解は38〜40回のどれか
170 名前:169 mailto:sage [2010/04/25(日) 09:07:05 ] >>168 おー、言われてみれば、そうだね。 2枚目が、被る場合も場合もあるのか…。 なかなか、上手くいかんの…
171 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 09:42:23 ] >なかなか、上手くいかんの… 最大に上手く行かない手をどうぞ。 >>163 の者だけど A_1-B_2 C_1-D_2 A_3-B_1 C_3-D_1 A_4-C_2 C_4-D_2 A_5-B_3 C_5-D_3 A_6-B_4 C_6-D_4 A_7-B_5 C_7-D_5 A_8-B_6 C_8-D_6 A_9-B_7 C_9-D_7 A10-B_8 C10-D_8 A11-B_9 C11-D_9 A12-B10 C12-D10 A13-B11 C13-D11 ここまでで24回、開いたカードは A_1 A_2 A_3 A_4 A_5 A_6 A_7 A_8 A_9 A10 A11 A12 A13 B_1 B_2 B_3 B_4 B_5 B_6 B_7 B_8 B_9 B10 B11 B== B== C_1 C_2 C_3 C_4 C_5 C_6 C_7 C_8 C_9 C10 C11 C12 C13 D_1 D_2 D_3 D_4 D_5 D_6 D_7 D_8 D_9 D10 D11 D== D== 後はどの裏カードから開いても、26回。合計50回 しかし、同じ開く順番なら A_1-B_2 C_1-A_1 D_2-B_2 clear3 A_3-B_1 C_3-A_3 D_1-B_1 clear6 A_4-C_2 C_4-A_4 D_2-C_2 clear9 A_5-B_3 C_5-A_5 D_3-B_3 clear12 A_6-B_4 C_6-A_6 D_4-B_4 clear15 A_7-B_5 C_7-A_7 D_5-B_5 clear18 A_8-B_6 C_8-A_8 D_6-B_6 clear21 A_9-B_7 C_9-A_9 D_7-B_7 clear24 A10-B_8 C10-A10 D_8-B_8 clear27 A11-B_9 C11-A11 D_9-B_9 clear30 A12-B10 C12-A12 D10-B10 clear33 A13-B11 C13-A13 D11-B11 clear36 *12-*13 *12-*12 *13-*13 clear39 合計39回
172 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 10:08:20 ] >>171 つまり、あれか? 情報がなんちゃらかんちゃら考えずに 分かってる組み合わせで取ってくのが最善手ってことか?
173 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 10:12:51 ] 取れるカード開いたときにとらないのはどう考えても開く回数の無駄だし。
174 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 10:33:12 ] 1枚目開いて知ってるのが出てきたときは、取らないと損。 2枚目で知ってるのが出たときは、取らなくてよい(取ったら損する場合があるが、取って得する場合はない)
175 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 10:43:38 ] >>171 > しかし、同じ開く順番なら > A_1-B_2 C_1-A_1 D_2-B_2 clear3 これは3手目以降が変わっていくのでは?
176 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 13:06:56 ] [最悪のケース] 裏がえしのカードをめくると既に見たことのある数字がでまくる (なければどれでも同じ) ただし裏がえしのカードを二枚同時にめくったときは 二枚目は一枚目と違う数字の中から既に見たことのある数字がでまくる (なければ一枚目と違う数字ならどれでも同じ) 最後の裏がえし4枚は同じ数字なのでめくると同時にとれる だから52-2で50回だっつーの、とっくに結論でてるだろ いい加減スレ違いなんだから終わりにしろよ
177 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 13:20:30 ] 2枚同時じゃなきゃにめくれないのか。onz
178 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 13:34:31 ] どうしても理解できない人は、まだ開けたことのない所のカードをめくると 1 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4 … の順番にでてくる神経衰弱のプログラムを作ってみればいいんじゃない 50回だからw
179 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 13:44:16 ] 神経衰弱に2枚同時なんてルールはねーだろw
180 名前:デフォルトの名無しさん mailto:178 [2010/04/25(日) 14:00:57 ] ごめん39だわ…
181 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 14:06:44 ] >>176 ==178 最後の裏がえし4枚は同じ数字なのでめくると同時にとれる なんで、最後の4枚が同じ数字って予言出来るの? そりゃ、>>1 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4 って並べれば、残るのは全部13だけど、最後がこんなパターンだったら? 11 12, 11 12, 11 13, 11 13, 12 13, 12 13
182 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 14:22:23 ] >>157 ==171? トランプとしては直感的じゃないけどA->1, 10->A, J->B, Q->C, K->Dで表す。 こんな場合どうなる?(以下、俺の試算) 1-D, 2-D, 3-D, 4-D, 5-C, 6-C, 7-C, 8-C, 9-B, A-B (ここまで10回 0組) 1-1, 2-2, 3-3, 4-4, 5-5, 6-6, 7-7, 8-8, 9-9, A-A (ここまで20回10組) 1-B, 2-B, 3-A, 4-A, 5-9, 6-9, 7-8 (ここまで27回10組) あとは、見てないもう一枚をみるところから始めれば 全てのカードが把握できるから、残り16回16組 ( 計43回 )
183 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 14:47:51 ] 182で正解のような気がするが
184 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 15:01:48 ] マスターマインドというゲームがあります 4つの中身が不明な箱と そのなかに4色のボールが入っていて (同じ色は何度でも使えます) 中身を知らない方の人が4つ箱に入っているボールの色を予想して 中身を知っている方の人が 1.色だけがあっている数 2.色と場所があっている数 を教えます(ウソはつかないものとします) 正解を出すのに最低何回質問をすればよいでしょうか?
185 名前:160 mailto:sage [2010/04/25(日) 15:04:02 ] A_1-A13, A_2-B13, A_3-C13, A_4-D13, A_5-A12, A_6-B12, A_7-C12, A_8-D12, A_9-A11, A10-B11 (ここまで10回 0組) B_1-A_1, B_2-A_2, B_3-A_3, B_4-A_4, B_5-A_5, B_6-A_6, B_7-A_7, B_8-A_8, B_9-A_9, B10-A10 (ここまで20回10組) C_1-C11, C_2-D11, C_3-C10, C_4-D10, C_5-D_9, C_6-C_9, C_7-C_8 (ここまで27回10組) ここまでで場所の分かっているカードは A_1〜A10,A11,A12,A13 B_1〜B10,B11,B12,B13 C_1〜C_8,C_9,C10,C11,C12,C13 D_9,D10,D11,D12,D13 場所の分かっていないカードはD_1〜D_8 の8枚。残りの組は16組。27+16=43
186 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 15:08:16 ] 数学 science6.2ch.net/math/ よし、とりあえず板移動w
187 名前:GAME mailto:sage [2010/04/25(日) 15:20:18 ] ロよッもテ動かせ i-libro.net/game/playroom/showgame.php?gameid=79
188 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 15:22:01 ] 1 2 3 1 4 1 5 1 6 2 7 2 8 2 9 3 10 3 11 3 12 4 13 4 5 6 7 8 9 10 11 12 13 5 4 6 7 6 8 7 9 8 10 9 11 10 12 11 13
189 名前:160 mailto:sage [2010/04/25(日) 16:21:37 ] A_1-A_2 A_3-B_1 A_4-C_1 A_5-D_1 A_6-B_2 A_7-C_2 A_8-D_2 A_9-B_3 A10-C_3 A11-D_3 A12-B_4 A13-C_4 B_5-B_6 B_7-B_8 B_9-B10 B11-B12 B13-C_5 D_4-C_6 C_7-D_6 C_8-D_7 C_9-D_8 C10-D_9 C11-D10 C12-D11 C13 ここまでで、25回。 場所の分かっているカードは、 A_1〜A13 B_1〜B13 C_1〜C13 D_1〜D_4,===,D_6〜D11,===,=== 場所の分かっていないカードは、D_5,D12,D13 すでに出来ているペアはC13-*13の1組、残りは25組。25+25=50 しかし、同じ開く順番なら (A_1)-(A_2) (A_3)-(B_1) (A_1-B_1) (A_4)-(C_1) (A_5)-(D_1) (C_1-D_1) (A_6)-(B_2) (A_2-B_2) (A_7)-(C_2) (A_8)-(D_2) (C_2-D_2) (A_9)-(B_3) (A_3-B_3) (A10)-(C_3) (A11)-(D_3) (C_3-D_3) (A12)-(B_4) (A_4-B_4) (A13)-(C_4) (B_5-A_5) (B_6-A_6) (B_7-A_7) (B_8-A_8) (B_9-A_9) (B10-A10) (B11-A11) (B12-A12) (B13-A13) C_5-(D_4) (C_4-D_4) (C_6)-(C_7) (D_6-C_6) (C_8)-(D_7) (C_7-D_7) (C_9)-(D_8) (C_8-D_8) (C10)-(D_9) (C_9-D_9) (C11)-(D10) (C10-D10) C12-(D11) (C11-D11) C13 ここまでで、42回とC13 場所の分かっていないカードは、D_5,D12,D13 まだペアにならなくて、場所の分かっているカードはC_5,C12,C13 残りは3組。42+3=45
190 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 16:26:40 ] 質問するスレ間違えたようなので引っ越します
191 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 16:59:55 ] バイバーイ
192 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 17:16:29 ] 46回? 1234567890JQK11223344556677889900JJQQKK1234567890JQK これを左から2枚ずつ引いていき、 覚えているのがあったら新しいのと覚えているのを引く。 12 34 56 78 90 JQ K1 11 12 22 23 33 34 44 45 55 56 66 67 77 78 88 89 99 90 00 0J JJ JQ QQ QK KK K1 11 22 33 44 55 66 77 88 99 00 JJ QQ KK
193 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:50:26 ] >>184 最低だと、1でいいんじゃないのか?
194 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:55:38 ] バカがいるw
195 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 22:40:43 ] >>194 いや、そのくらい軽くこなさないとマインドシーカーはクリアできないよ。 つーか終盤になると質問すら出来んレベル
196 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 23:07:26 ] >>194 ん?1回目で当たったら1になるんじゃないのかい? 問題の不備だとは思うが。
197 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 00:04:50 ] >>152 42回が正解 codepad.org/XrqVqoQJ
198 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 01:04:46 ] >>130 仕事はやいですね cpyすっごいならんでるよ >>131 品質△ (悲 次はもっといい問題作ってきます 作者の自己解答上げておきます codepad.org/c32vQo2w
199 名前:160 mailto:sage [2010/04/26(月) 01:31:28 ] >>197 40回? A23A4A5A6272829303J3Q4K44556566778788990900JJQJQQKKK A2 3A AA 4A 5A AA 62 22 72 82 22 93 33 03 J3 33 Q4 K4 44 44 55 56 66 55 66 77 78 88 77 88 99 00 99 00 JJ QQ JJ QQ KK KK (A)(2) (3)(A) (AA) (4)(A) (5)(A) (AA) (6)(2) (22) (7)(2) (8)(2) (22) (9)(3) (33) (0)(3) (J)(3) (33) (Q)(4) (K)(4) (44) ((4)4) ((5)5) (5)(6) (66) ((5)5) ((6)(6)) ((7)7) (7)(8) (88) ((7)7) ((8)(8)) ((9)(9)) ((0)0) ((9)9) ((0)(0)) ((J)(J)) ((Q)Q) ((J)J) ((Q)(Q)) ((K)(K)) ((K)K)
200 名前:160 mailto:sage [2010/04/26(月) 02:14:09 ] >>197 もとい!42回。 A23A4A5A6272829303J3Q4K44556566778788990900JJQJQQKKK A2 3A AA 4A 5A AA 62 22 72 82 22 93 33 03 J3 33 Q4 44 K4 44 55 56 66 55 66 77 78 88 77 88 99 90 00 99 00 JJ JQ QQ JJ QQ KK KK (A)(2) (3)(A) (AA) (4)(A) (5)(A) (AA) (6)(2) (22) (7)(2) (8)(2) (22) (9)(3) (33) (0)(3) (J)(3) (33) (Q)(4) (44) (K)(4) ((4)4) ((5)5) (5)(6) (66) ((5)5) ((6)(6)) ((7)7) (7)(8) (88) ((7)7) ((8)(8)) ((9)9) (9)(0) (00) ((9)9) ((0)(0)) ((J)J) (J)(Q) (QQ) ((J)J) ((Q)(Q)) ((K)K) ((K)(K))
201 名前:192 mailto:sage [2010/04/26(月) 03:19:16 ] やっぱ46回になる。 ttp://codepad.org/sBOxHahJ また、「カードの総数 - 数字の数 / マークの数」 みたいな式でもあらわせるかも。
202 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 04:13:55 ] >>201 8手目に+A-Aで取らないという選択肢 +A+2 +3+4 +5+6 +7+8 +9+0 +J+Q +K-A *A+A -2*2 -3*3 #10手03組 -4*4 -5*5 -6*6 -7*7 -8*8 -9*9 -0*0 -J*J -Q*Q -K*K #20手13組 /A-A /2+2 /3+3 /4+4 /5+5 /6+6 /7+7 /8+8 /9+9 /0+0 #30手23組 /J+J /Q+Q /K+K
203 名前:192 mailto:sage [2010/04/26(月) 07:42:45 ] >>202 それは、後に出てくるのが分かっている上での最善の手の気もする。 >>151 に↓と書いてあるけど、この解釈の仕方により変わるので難しいが。 ※但しコンピュータは最善の手を実行するものとする。 作者さんの答えきぼん。
204 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 08:07:04 ] 2回目のめくりである札の2枚目がわかったときに、 次の手でその2枚を取るのはどう考えても悪手。
205 名前:189 mailto:sage [2010/04/26(月) 09:30:20 ] 45.5 というか やっぱり 46回だ。 >>188 なら>>204 の作戦にも強い。ID無いのが残念。
206 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 09:46:02 ] >>205 A01-A02 A03-B01 A04-C01 A05-D01 A06-B02 A07-C02 A08-D02 A09-B03 A10-C03 A11-D03 A12-B04 A13-C04 B05-B06 B07-B08 B09-B10 B11-B12 B13-C05 ここまで17手 0/26組 これで1-13が2組出ているんだから後は消していくだけじゃね? C06-C13 がでたら A06-A13を取る D04-D13 がでたら B04-B13を取る ここまで35手 18/26組 記憶している残りのカードを取る A01-05 & C01-05 B01-03 & D01-03 ここまで43手 26/26組
207 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 09:53:03 ] >>189 で言うと (A_4-B_4) これが悪手
208 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 10:04:01 ] 207は忘れてくれww
209 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 10:10:00 ] 悪手は悪手だよ。 C_4とD_4が2回目のめくりで出てるから回数には影響しないってだけで。
210 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 10:58:00 ] もうトランプの話題はいいだろ。 最大値は計算するまでもないわけだから、 期待値とかどう?
211 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 11:25:44 ] >>210 最大値は43だろ。
212 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 14:57:10 ] She never eats NONI.
213 名前:192 mailto:sage [2010/04/26(月) 17:46:05 ] >>204 分かったかも。 覚えるのに2ターン、取るのに1ターンの3ターンかかり無駄という感じか。 2枚目で覚えているのを取れば、覚えるのに1ターン、取るのに1ターンにできる。 厳密には、覚えたのが1枚残るから、3-1=2、2-0.5=1.5ターンという感じか。
214 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:12:45 ] >>189 開いてないC13を分かってるカードに分類しちゃだめだろw
215 名前:100 mailto:sage [2010/04/26(月) 18:33:16 ] アク禁その他で遅くなりました。 私の作った関数はこんな感じ。 -- using namespace std; typedef complex<double> coordinate; static vector<coordinate> func(coordinate const pa, coordinate const pb, double lac, double lbc) { double lab = abs(pb - pa); double s = (lac + lbc + lab) / 2; double s2abc = s * (s - lac) * (s - lbc) * (s - lab); vector<coordinate> rtn; if (s2abc < 0) return rtn; double lcd = sqrt(s2abc) / lab * 2; double lad = sqrt(lac * lac - lcd * lcd); double lbd = sqrt(lbc * lbc - lcd * lcd); double k = (lbd > lab ? -lad / (lbd - lad) : lad > lab ? lad / (lad - lbd) : lad / (lad + lbd)); coordinate pd = pa + k * (pb - pa); if (lcd > 0) { rtn.push_back(coordinate(pd.real() - lcd / lab * (pb.imag() - pa.imag()), pd.imag() + lcd / lab * (pb.real() - pa.real()))); } rtn.push_back(coordinate(pd.real() + lcd / lab * (pb.imag() - pa.imag()), pd.imag() - lcd / lab * (pb.real() - pa.real()))); return rtn; } -- 考え方はヘロンの公式で面積を求めてからCからの垂線を延ばすという意味で>124とほぼ同じ。>120もそうかな。 後は水平だろうとそうでなかろうと、垂線の足の位置はLadとLbdの比で決まる。どっち側かは兎も角。 最後に足から両側に垂線を延ばせば両方の点Cが求まる。 # 一点しかないとき(=面積が0)のときはもっとLcdを求める必要もないんだけど、そこは横着w
216 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:43:33 ] 円の方程式を二つつくる 引く ax + by = cができる 円の方程式の片方に代入して解の公式を使う 解がある場合にax + by = cに代入すれば座標が求まる
217 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 23:48:45 ] >>198 なるほど、printfに%.8sなんて使い方あったのですか。目から鱗。
218 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 02:28:28 ] >>184 面白い。 最初はバラバラに予想して何色存在するかを見るのがいいのかな。
219 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 09:21:04 ] >>184 たぶん4回。 1回目は0123の一手。 それでHit0、Blow3の時が一番難しいと思うが、 2回目は0122とかと1箇所を変えて入れ、 H0B2、H0B3、H1B1、H1B2のどれになるかで予想を変える。 2回目の結果で一番難しいのは、多分H0B2とBlowが減ってしまうやつ。 それでも、色の種類が3、2は1つ以下、3は1つ以上という事から、 答えを15種類ぐらいにしぼれる。 3回目はその15種類のうちのひとつの3200とかにすると、 その結果によって、4回目になりうる入力は1つに絞られるはず。 ただ、これはプログラムの問題というより、数学の問題だな。 ランダムで生成された問題を100回解いて、 平均回数を少なくするプログラムを作れとかの方が面白いかも。
220 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 11:32:36 ] 正しく(もっとも効率よく)質問をするプログラムを作るのも難しくて面白いと思われ
221 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 03:15:57 ] >>203 も言っているように、後で出てくるカードが分かっていなかったら。 12 31 41 51 62 72 82 93 03 J3 Q4 K4 55 66 77 88 99 00 JJ QQ KK 54 67 66 87 98 09 J0 QJ K5 QQ KK 11 22 33 44 11 22 33 44 55 77 88 99 00 JJ 46回
222 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 06:22:15 ] >>221 なんで13〜21手の所でペア取っちゃうんだ?
223 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 06:24:43 ] そうじゃないと手数が増えるからだろw
224 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 06:34:35 ] 残しておいて3枚目引いたときに取った方が手数減ると思うが
225 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 06:37:06 ] 2枚目をめくった時に3枚目を引いたら、4枚目が出るまでスルーな
226 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 06:39:47 ] 3枚目、4枚目がめくりの2枚目に出る可能性がある以上、 一回目のめくりで2枚目が出たら次に1枚目をめくるのが正しい。
227 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 06:42:23 ] >>226 13種類の絵柄で、めくりの2枚目で3枚目4枚目を出せるのは何種類だ?
228 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 06:46:20 ] 何種類とか関係意味わかんねーよw だいたい、とっておいてもその場でめくるよりめくる回数増える可能性こそあれ、 減る可能性は全くないのにw
229 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 06:49:11 ] >>228 じゃあ言い方を変えるわ。 >>224-225 の取り方で最大何手になるよ
230 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 06:51:17 ] 残した方が手数が減るって主張してるのはお前だろ? 46手より小さい手をお前が示さなきゃだめだろw
231 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 06:59:47 ] >>230 >>206
232 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 07:16:16 ] そういう並びに強いってだけだしなあ。 >>224-225 で 1 2 1 2 3 2 3 2 4 3 4 3 5 4 5 4 6 5 6 5 7 6 7 6 8 7 8 7 9 8 9 8 10 9 10 9 11 10 11 10 12 11 12 11 13 12 13 12 1 1 13 13 これやってみろよ
233 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 07:30:51 ] 50手か
234 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 07:33:58 ] 結局並びかたによって2枚目の時点でとるか、3枚目まで待つかどっちがいいか 一概には言えないってことか。
235 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 10:54:01 ] >>234 3枚目まで待った方がいい。そしてそれは>>174 が既に指摘してる。 待っても待たなくても同じか、待った方が手数減るかのどっちかで 待たない方が手数減るパターンは有り得ないのだから、待った方がいい。 引いた時点で、待っても得しないと分かりきっている場合は引いてしまってもいいが、別に引くメリットはない。
236 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 11:18:12 ] >>235 お前はちょっと前の>>232 すら見えないのか?
237 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 11:36:01 ] >>236 一概には言えないなんてとぼけたこと抜かしてるから、 常にとらなければいいと言ってるだけ。
238 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 11:40:07 ] A01 A02 B01 B02 A03 C02 B03 D02 A04 C03 B04 D03 A05 C04 B05 D04 A06 C05 B06 D05 A07 C06 B07 D06 A08 C07 B08 D07 A09 C08 B09 D08 A10 C09 B10 D09 A11 C10 B11 D10 A12 C11 B12 D11 A13 C12 B13 D12 C01 D01 C13 D13 同じ数字が3回目に出てから取る場合。 (A01)-A02 (B01)-B02 A03-C02 B03-D02 A04-C03 B04-D03 A05-C04 B05-D04 A06-C05 B06-D05 A07-C06 B07-D06 A08-C07 B08-D07 A09-C08 B09-D08 A10-C09 B10-D09 A11-C10 B11-D10 A12-C11 B12-D11 (A13)-C12 (B13)-D12 C01-A01 D01-B01 C13-A13 D13-B13 ここまでで28回 すでに取れたのは4ペア、残り22ペアなので、22回。28+22=50 同じ数字が2回目に出てから取る場合。 (A01)-(A02) (B01-A01) (B02-A02) (A03)-(C02) (B03-A03) (D02-C02) (A04)-(C03) (B04-A04) (D03-C03) (A05)-(C04) (B05-A05) (D04-C04) (A06)-(C05) (B06-A06) (D05-C05) (A07)-(C06) (B07-A07) (D06-C06) (A08)-(C07) (B08-A08) (D07-C07) (A09)-(C08) (B09-A09) (D08-C08) (A10)-(C09) (B10-A10) (D09-C09) (A11)-(C10) (B11-A11) (D10-C10) (A12)-(C11) (B12-A12) (D11-C11) (A13)-(C12) (B13-A13) (D12-C12) (C01-D01) (C13-D13) 38回
239 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 11:44:13 ] はぁ? >>232 は3枚目まで待った場合に2枚目で取る場合より手数が増えるパターンなんだけど?
240 名前:238 mailto:sage [2010/05/01(土) 11:47:35 ] 同意
241 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 11:49:47 ] わかってると思うけど>>239 は>>235 =>>237 へのレスね
242 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 11:56:36 ] >>188 の並びなら2枚目が一回目にめくられても3枚目以降に取っておいた方が、 その場で1・2枚目を取るよりも手数が少なくなる。 >>232 の並びなら2枚目が一回目にめくられたら2回目で1枚目をめくって取ったほうが、 3枚目以降に取っておくより手数が少なくなる。 片方のやり方がもう一方のやり方より絶対少ないとはいいきれないので、 一概には言えないってのは正しい。
243 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:12:27 ] >>239 3枚目まで待つってどういう場合想定してる? (1 2), (3 1)と引いたときに次に(1 1)を引くのは無駄だと言ってるだけで、 (1 2)の後に1引いたのに3枚目の1出るまで待てなんて気違いはいないぞ。
244 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:23:48 ] >>243 >>224-225 はお前が言う気違いのやり方のことだし、 そのパターンで手数が減るのが>>188 の並びなんだよw 理解してないならしゃしゃり出てくんなよ
245 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:53:22 ] def func(cards){ unknown = cards # まだ引いてない未知のカード known = [] # 引いたので既知だがまだとってないカード i = 1 while(unknown, knownがともになくなる){ if(unknownがまだある){ card1 = unknownから1枚引く if(card1 と同じ数がknownにある){ card2 = knownからcard1と同じ数を取り出す print '%2d: (%2d* %2d)' % (i, card1, card2) } else{ card2 = unknownから1枚引く if(card1 != card2){ knownにcard1を追加 knownにcard2を追加 } print '%2d: (%2d* %2d*)' % (i, card1, card2) } else{ # unknownがもうない card1 = knownから1枚取り出す card2 = knownからcard1と同じ数を取り出す print '%2d: (%2d %2d)' % (i, card1, card2) } i += 1 } } C/C++コードじゃなく擬似コードだが、カード引く順番はこれよりも効率よくやる方法ある?
246 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:00:57 ] >>244 すまない。そんなバカがいることに気づかず>>174 を出してしまった。 >>188 のカードが3枚足りないことに気づかなかった君と同じくらいドジで申し訳ない。
247 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:03:42 ] 上手く揚げ足とったつもりだろうけど、3枚どう追加してもかわんねーんだよw
248 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:09:25 ] ていうか、あんまり真面目によんでなかったけど、ほんとに>>224-225 はそうやりたかったの? 読み直したら 225 名前:デフォルトの名無しさん [sage]: 2010/05/01(土) 06:37:06 2枚目をめくった時に3枚目を引いたら、4枚目が出るまでスルーな での2枚目は、めくりの2枚目だから>>225 は分かってるように思えるんだが。 めくりの1枚目とめくりの2枚目の区別をつけて、めくりの2枚目で引いたときに引き直さなくていいと言ってるなら >>174 やら>>235 , >>237 と同じ意見。
249 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:13:42 ] 読んでないなら口出すなよ、頼むから。 >>222 読めば>>224-225 の意味はわかるだろ。 一々バカに説明する身にもなってくれ。
250 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:15:33 ] >>247 じゃあ、3枚追加したら何回になる? >>188 のカードに足りない5 12 13を追加して 君の方法で 1 2 3 1 4 1 5 1 6 2 7 2 8 2 9 3 10 3 11 3 12 4 13 4 5 6 7 8 9 10 11 12 13 5 4 6 7 6 8 7 9 8 10 9 11 10 12 11 13 5 12 13 を、46回よりも少なくできたのなら、俺が間違いだったことになる。
251 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:22:39 ] >>206
252 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:26:20 ] >>249 >>222 は読みようがない。それまで話の流れ的に使われていた A23A4A5A6272829303J3Q4K44556566778788990900JJQJQQKKK を使っていたとすれば、Q4 K4の後に5はこない。
253 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:34:02 ] (1 2) (3 1) (4 1) (5 1) [1 1] [1 1] (6 2) (7 2) (8 2) [2 2] [2 2] (9 3) (10 3) (11 3) [3 3] [3 3] (12 4) (13 4) (5 6) (7 8) (9 10) (11 12) (13 5) (4 4] [4 4] (6 6] (7 7] (6 6] (8 8] (7 7] (9 9] (8 8] (10 10] (9 9] (11 11] (10 10] (12 12] (11 11] (13 13] (5 5] (12 12] (13 13] [5 5] >>252 これだから読解力のないバカは困る。 >>221 の13〜21手目は一回目にめくったときに一枚位置がわかってるものを取ってる。 それに対して否定してるんだから>>222 =>>224-225 の意図が>>174 とかと別なのは明白。
254 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 17:28:05 ] >>253 うむ。俺の負けだな。ごめんよ。
255 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 18:05:01 ] なーんだ、前もって並びを知らない前提だと、常に最短の手を返すアルゴリズムは存在しないんだ。 KKKKQQQQJJJJ00009999888877776666555544443322 12 113312 KKKKQQQQJJJJ00009999888877776666555544443322 12 121133 この2つは残りの6枚までは、前から順にとりつづける他にない。 残り8枚のところから考えると 1 2 1 1 3 3 1 2 (1 2) (1 1] (1 3) (3 3] (1 1] (2 2] ←負けた人の戦略 (1 2) (1 1) (3 3) (1 1] (2 2] ←勝った人の戦略 1 2 1 2 1 1 3 3 (1 2) (1 1] (2 2] (1 1) (3 3) ←負けた人の戦略 (1 2) (1 2) [2 2] (1 1) [1 1] (3 3) ←勝った人の戦略 (1 2)の後の1引いた時点で残りの並び順をエスパーしないと、最短手は得られない。
256 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 18:10:56 ] 探しているのは常に最短ではなく、(自分にとって)最悪なカードを引き続けた場合の最短…だよね?
257 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 19:29:32 ] >>256 そうなのだが、個人的にはなんだかつまらない。
258 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 20:19:00 ] 初期配置は13*13*13*13*12*12*12*12* ... *2*2*2*2パターンか? それを全部解かせるのは無理なので、 100回とかをシャッフルしたのを解いて、 平均手数の少なさを勝負?するとかは。
259 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 20:31:17 ] }else{ # unknownがもうない 4*4*4*4*3*3*3*3*2*2*2*2*1*1*1*1=331,776 unknownがもうないフラグを追加すれば動くと思う。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10578.c
260 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 15:59:01 ] >>151 シャッフルしたのを解き続けてみると43回っぽい。 1引き目からすぐにそろっているのを引くと46回が最大になる。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10584.txt
261 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 17:59:26 ] >>188 の並びでやると、最大値が変わる static int Num[]={0,1,2,0,3,0,4,0,5,1,6,1,7,1,8,2,9,2,10,2,11,3,12,3,4,5,6,7,8,9,10,11,12,4,3,5,6,5,7,6,8,7,9,8,10,9,11,10,12,4,11,12}; static int Mark[]={0,0,0,1,0,2,0,3,0,1,0,2,0,3,0,1,0,2,0,3,0,1,0,2,1,1,1,1,1,1,1,1,1,2,3,2,2,3,2,3,2,3,2,3,2,3,2,3,2,3,3,3}; r = Mark[c] * NUM_SUU + Num[c]; /* r = rand() % CARD_SUU; if(make[r]) continue; */ [46回 平均46.00回 最大46回] (1枚目からそろいを取らない) [46回 平均46.00回 最大46回] (1枚目からそろいを取る)
262 名前:sage mailto:sage [2010/05/02(日) 22:09:28 ] >>261 ほんとそうなるね。 いくつかの数値の1つ目を1手目、2つ目以降を2手目で取らせて 4つを取れる事なく覚えてしまい、 1つ目に覚えているのを取らせているのか。(+→-とゲットしているターン) だとやはり正解は46回なのかな。 それかアルゴリズムで工夫する余地があるのか。
263 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:40:09 ] 46回より小さい回数(43回)で>>188 の並びを解く手順が>>253 にあるけど、 それをアルゴリズムとして定式化したときに、他のも46回未満で解けるかどうか。 試してみたところ、>>188 は43回で出来たが他のは下手すりゃ50回越えたりした。 もっとアルゴリズムを改善すればできるのかもしれないが、できないかもしれない。 この問題を解くアプローチとしては、次のどちらか ・どんな札でも46回よりも少なく解ける取り方のアルゴリズムを開発してみる ・プレイヤーと、いじわるな運命の神様の2人プレイのゲームとみなして、 プレイヤーの行動に対し、常に最悪なカードを返しつづける神様のアルゴリズムを開発する (最初から札を固定で与えるのじゃなくて、プレイヤーの行動によって次に出すカードを選ぶ) になると思う。
264 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 01:07:35 ] >>263 >>253 の技がよく分からん・・ そのアプローチは両方面白いな、試して見る。
265 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 08:43:31 ] 問題、ドラクエのまんたんを実装せよ。 MP、回復量はホイミ2:20、ベホイミ5:75、ベホマ8:全快、ベホマラー15:75(全体)。 回復量に誤差はなし(難しくなるので)。 MPぱパーティー共通の物とし、少ないMPで全快させる。 表示のさせ方などは自由。 キャラの能力例 勇者/300 戦士/350 僧侶/250 魔法使い/200 (←キャラの名前、最大HP) (↓現在HP) 1、250 350 210 200 2、210 350 150 200 3、250 300 200 150 4、280 300 050 150 次の問題は>>280
266 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 08:53:21 ] ナップサック問題?
267 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 09:35:14 ] ベホマラーを使うかどうかを最初に判断。 後は個別に一番MP消費の少ない魔法を選ぶ。
268 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 10:30:09 ] ベホマラーを2回の使ったほうがいい場合は?
269 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 10:42:54 ] まず、ベホマラーなしでの最小MP消費を考える。 次に、ベホマラー1回での最小MP消費を考える。 次に、ベホマラー2回での最小MP消費を考える。 この中で最小のものを答えとする。 なお、ベホマラー3回以上はありえない(ベホマ*4の方が少なくなるから)
270 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 10:46:06 ] ベホマラー1回のときのMPがベホマラーなしのときのMPより多くて ベホマラー2回がベホマラーなしよりMPすくなくなる場合なんてあんの?
271 名前:268 mailto:sage [2010/05/03(月) 11:32:43 ] >>270 (↓現在HP) 150 200 100 50
272 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 20:57:29 ] >>265 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10585.cpp 使い勝手の悪いところがあります。直せる方は教えてください。
273 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 01:19:30 ] >>272 問題は正解! ベホマラー3回は無い事や、ベホマよりベホイミ+ホイミ の方がMPが少ない事も考慮されててgood。 使いにくくはなかったけど、HP入力ボックスの右か下に /300とかと最大HPを表示するといいかも。 後、結果がメインウィンドウとMsgBox両方に表示されるが、 メインウィンドウの方は表示が途中できれてしまう。
274 名前:272 mailto:sage [2010/05/04(火) 14:39:51 ] (修正しました)タブキーで移動したいのですが、やり方をご存知の方居ませんか? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10586.c
275 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 21:17:15 ] 以下 loopyなループ === 開始 ===
276 名前:デフォルトの名無しさん [2010/05/05(水) 03:20:55 ] She never eats NONI.
277 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 07:52:30 ] loopy goopy
278 名前: ◆5yaOF3KA5w mailto:sage [2010/05/05(水) 17:45:05 ] うむ
279 名前:デフォルトの名無しさん [2010/05/06(木) 04:04:32 ] 五月病の季節
280 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 10:43:13 ] 亀だが>>1 やってみた 【C言語歴】 2年 【レベル】 ゲーム製作やってるぐらい 【コンセプト】 慣れた方法で。 #include <iostream> #include <vector> const static int NUM_SIZE = 5; void main() { std::vector<int> intContiner; int temp = 0; int sum = 0; std::cout << "5つ数を入力して下さい。" << std::endl; for( int i = 0 ; i < NUM_SIZE ; ++i ) { std::cout << i + 1 << "番目入力" << std::endl; std::cin >> temp; intContiner.push_back( temp ); } std::cout << "5つ数の合計" << std::endl; std::vector<int>::iterator itr = intContiner.begin(); for( ; itr != intContiner.end() ; ++itr ) { sum += (*itr); } std::cout << sum << std::endl; std::cout << "5つ数の平均" << std::endl; std::cout << sum / NUM_SIZE << std::endl; }
281 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 12:44:44 ] >>280 tempは入力ループでしか使わないのだから、関数の先頭で宣言するのはバグの元。 sumは計算ループ以降でしか使わないのだから、関数の先頭で宣言するより直前で宣言した方が見通しがいい。 C流でやると言うのなら別に止めはしないが、iの宣言だけはポリシーに反することになるので美しくない。 あと、void main()よりもint main()の方が一般的だ。 ↓以下main()の戻り値の型についてのいつもの議論w
282 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 12:48:54 ] >>281 イテレータの宣言位置が変態なのは指摘漏れ?w 処で、>280は切り捨てられた平均値なんだね。小数点以下一桁まで欲しくね?
283 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 22:53:42 ] なんで const static int で宣言するんだ? メモリ無駄だろ。 しかも表示のところは 5 決め打ちだし。
284 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 01:06:15 ] > メモリ無駄だろ。 アホか?
285 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 02:29:33 ] >>283 知らないなら書かなくていいんだよ。
286 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:45:35 ] >>283 流石にワロタ
287 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 21:53:40 ] >>283 の人気に嫉妬 というかどうみても釣り
288 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 06:01:52 ] >>274 ここのでできるかも。 ttp://www.sm.rim.or.jp/~shishido/wsclass.html
289 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 21:04:22 ] >>283 の前半はアレだけど、後半は同意する。
290 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 21:23:42 ] なんでお前ら揃って悪意に解釈してんだ? 俺は>>283 じゃないけどさ すぐ揚げ足とって茶化すのだけは得意だな もうちょっと意味、意図を汲み取る努力しろよ お前らみたいなのと仕事したくないな正直
291 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 21:25:52 ] 私女だけどコンソールのちょっとしたプログラムなのに 「メモリが無駄(キリッ」とか言ってる男の人って恥ずかしいと思う。 いつの時代のPC使ってるんだろ?きもーい
292 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 22:28:22 ] お前みたいなのがこうやって死んで会社や社会に迷惑掛けるんだよ tsushima.2ch.net/test/read.cgi/newsplus/1273411891/ tsushima.2ch.net/test/read.cgi/newsplus/1273746605/
293 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 01:17:43 ] >>290 悪意に解釈もなにも、メモリ無駄にならないのになるって書いてあるんだもん。
294 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 02:42:33 ] >>291 あんたの方がよっぽどきもい。
295 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 09:25:57 ] 拙者の彼女をプログラムしてくれでござる
296 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 11:26:35 ] > iの宣言だけはポリシーに反することになるので美しくない。 どゆこと?
297 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 12:57:01 ] >>296 また古いものをw >280では、以下の例外を除く変数は全て関数の先頭で宣言している。 但し、ループ制御のiだけはC99やC++でしか通用しない宣言を使っている。 また、>282でも指摘されているが、イタレータもブロックの途中で宣言している。 こういうのをポリシーがないというのだろ。
298 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:33:58 ] うちも今更>>2 をやってみる 【C++言語歴】約10年。 【レベル】いわゆるサンデープログラマ。主にフリーソフト制作等。 【コンセプト】 シンプルに。 【コメント】STLコンテナは簡潔に表記する為にある。本題でvector使うのは逆効果。 #include <iostream> #include <iterator> int main() { using namespace std; const int numberOfNumbers = 5; // 入力 cout << "数字を" << numberOfNumbers << "個入力" << endl; istream_iterator<double> it(cin); double sum = *it; for (int i = 1; i < numberOfNumbers; ++i) sum += *++it; double average = sum / numberOfNumbers; // 出力 cout << "合計: " << sum << endl; cout << "平均: " << average << endl; // 終わり return 0; }
299 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:36:56 ] 【問題2:ワード覆面算】 入力された任意の8文字以内の単語2つからワード覆面算を作成せよ 入力された単語に含まれない文字は適当な記号を用いて表示すること ただしそれぞれの覆面算は単一の解を持つものとし"浮き"は認めない 【難易度】 80分で中級 【入力例】 バナナ バナナ 【出力例】 バナナ+バナナ=ナナ◎ [ 499+499=998 ] バナナ+バナナ=○ナナナ [ 500+500=1000 ] バナナ+バナナ=△△バ◇ [ 577+577=1154 ] バナナ+バナナ=△△ナ◎ [ 599+599=1198 ] バナナ+バナナ=ナ△△△ [ 611+611=1222 ] バナナ+バナナ=△▽※バ [ 688+688=1376 ] バナナ+バナナ=△ナ△○ [ 755+755=1510 ] バナナ+バナナ=△☆バ※ [ 788+788=1576 ] バナナ+バナナ=△ナ☆◇ [ 877+877=1754 ] バナナ+バナナ=△◎ナバ [ 899+899=1798 ] バナナ+バナナ=△バ△○ [ 955+955=1910 ] 【補足】 上記はWikipediaの例"バナナ+バナナ=シナモン"に合わせただけであり 入力される単語2つが同じとは限らない
300 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:42:41 ] かなりの良スレの予感がするけど自分にはついてけないぜ・・・
301 名前:298 mailto:sage [2010/05/18(火) 22:01:47 ] 覆面算を解く問題はたまに見かけるのでちょっとひねって作成のほうにしてみました。 前回の出題よりは品質あげたつもりなんですがどうでしょう。 80分は作者が実際に解くのにかかった時間が基準なので異論は認めません。
302 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 03:07:45 ] using namespace std; ヒェー。
303 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 05:47:06 ] >>302 それを使うことの弊害を知りつつ使ってるのなら、無駄に恐れることはない。 おまじないのように付けてるのならタダのバカだけど、 おまじないのように避けてる人とそう変わらんよ。
304 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 12:43:18 ] >>302 標準ライブラリ以外のライブラリは使っていないのだから 故意にcoutという変数を定義するようなことをしない限り名前は衝突しない #include <iostream>してるんだから構文解析はそこで終わっていて std名前空間にcoutの定義を探しにいっても追加のコストはほどんどない と考えて記述が短くなる方を選んでるんだけど何か問題ありますか
305 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 13:16:46 ] nothing
306 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 15:38:45 ] おまじないのように付けてるタダの馬鹿ですんません・・・
307 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 15:39:29 ] >>299 バナナ+バナナ 099+099=198(○ナ○) 100+100=200(○ナナ) とかは不成立?
308 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 22:55:51 ] >>307 不成立です バナナ+バナナ=○ナ○ [099+099=198] 覆面算は同じ文字のところには同じ数字を入れるルールなので バナナ+バナナ=○ナ△のように記号を変えなければなりません また数字の先頭が0ではないというのは暗黙の了解になっていて こういった場合"バ"が0ではないことを利用して解くのが 普通なので099という表記もできません バナナ+バナナ=○ナナ [100+100=200] については他にも 200+200=400、300+300=600、400+400=800と回答が複数あるので パズルとして成立しません Wikipediaに解説があります ja.wikipedia.org/wiki/%E8%A6%86%E9%9D%A2%E7%AE%97
309 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 00:27:34 ] そういや、ここってスレタイにはC,C++って入ってるけど、限定する意味あんのか?
310 名前:307 mailto:sage [2010/05/23(日) 03:14:31 ] >>308 サンクス、了解した。
311 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 04:36:49 ] お題 (次>>350 ) 16進テキストをファイル・コマンド・またはgetsから入力して、 バイナリーに変換し、test.txtファイルに落とす。
312 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 05:46:32 ] %81%AB0%E3%81 とかも。 81 AB 30 E3 81
313 名前:デフォルトの名無しさん [2010/05/25(火) 19:41:39 ] お題: >>311 ,312に示す文章にはいくつかの誤りがあります。正しい日本語へ修正しなさい。
314 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 09:39:13 ] gets()を使えだなんてろくでもない問題、直すほどの価値もない。
315 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 10:03:55 ] >>314 使わせといてあとでこれこれこういう理由があるから使うな、と言った方が 何でか教えないけどとにかく使うな、よりは覚えると思う
316 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 10:21:26 ] >>315 そういうのは初心者スレでやれ。
317 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 11:19:19 ] それは>>314 に言ってくれ
318 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 11:29:50 ] ちょっと待ってくれ。 とどのつまりは>311の説明が下手なことが原因じゃないか。 ここは一つ、>311がお題を提示し直すまで静観しようじゃないか。
319 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 15:08:20 ] 例えば、gets()で1行入力 ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:%E6%A4%9C%E7%B4%A2?search=%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A22010 標準出力には、 E7 89 B9 E5 88 A5 E6 A4 9C E7 B4 A2 E3 82 A6 E3 82 A3 E3 82 AD E3 83 9A E3 83 87 E3 82 A3 E3 82 A2 ファイルには 文字コードUTF-8で、 ja.wikipedia.org/wiki/ 特別検索?search=ウィキペディア2010
320 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:57:18 ] >>319 何が言いたいんだよ。リンク間違ってるし。 あなたが311でgets()の使い方教えてあげてるつもりなら芯でくれ。 gets()は学校では習うかもしれないけど安全じゃないから誰も使わないの。 そもそもファイルからの入力にはgets()使えないでしょ。(本当は使えるけど。) もしファイルからの入力はどの関数を使ってもいいのに 標準入力にはgets()を使わなければいけないという意味なら問題がおかしい。 311は出力ファイルは指定しているのに入力ファイルは指定していなかったり バイナリーファイルの拡張子がtxtだったり なぜか"%AB0"とか三桁の数字がでてきたり意味不明な上に 16進テキスト(16進数のこと?)とかコマンド(コマンドラインのこと?)とか 単語も日本語の文法もめちゃくちゃなんだからウダウダいってないで直せよ。
321 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:02:13 ] お題を出す立場じゃなくて、課題を出された方なんだろうな。
322 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:03:04 ] 問題;scanf()で入力して、バイナリー変換し、ファイルに書き出してください。 %E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%83%BC%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%8B%A1%E5%BC%B5%E5%AD%90%E3%81%8Ctxt%E3%81%A0%E3%81%A3%E3%81%9F%E3%82%8A%20
323 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:13:10 ] >>322 嫌です。
324 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:22:31 ] URLデコーダー
325 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:25:12 ] あきらかに宿題だろ。
326 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 03:05:10 ] ていうか、>>311 には文字コード指定されてないんだから、空読みしてオレオレコードで書き出せばいいんじゃないの? #define ENOUGH_LONG_LENGTH 3 int main(void) { char buf[ENOUGH_LONG_LENGTH]; FILE *fp; int miyazaki = 0xdeadbeef; gets(buf); fp = fopen("test.txt", "wb"); fwrite(&miyazaki, sizeof(int), 1); fclose(fp); return 0; }
327 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 03:26:17 ] >>326 ところが>>322 でURLエンコードのデコードをバイナリー変換と呼んでるらしいことが 判明しているのでそれでは正解にならない つか宮崎って何w
328 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 04:01:43 ] >>327 deadbeef…(´;ω;`)ブワッ
329 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 08:08:54 ] >>320 >バイナリーファイルの拡張子がtxtだったり ftpでbinary modeで*.txtを転送するなんて当たり前のことだろ。
330 名前:319 mailto:sage [2010/05/27(木) 08:19:39 ] >>326 16進数のASCII文字列を読み込んで、その内容をバイナリーでファイルに出力だ。 gets()して、それは捨てるって書いて無いよ。 デフォルトで使うだろうと予想してたけど。
331 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 08:43:08 ] >>319 だからきちんと問題書けよ。つーか、課題丸投げなんだろ。宿題スレに逝けよ。
332 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 23:13:26 ] >>330 問題文を短くしてgets()を使わなければ突っ込まれないと短絡的に考えたのだろうが あいにくURLエンコーディングには英数字の平文が混ざるので16進数ではないし 実装を比べるスレの趣旨からしてscanf()を指定する必然性も全くないし URLデコードは文字列から文字列への変換なんだからバイナリーとか発してる時点で馬科決定。 関数の使い方もコンピュータ用語も理解してないレベルで出題するなよ。
333 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 00:32:43 ] #include <stdio.h> #define ENOUGH_LONG_LENGTH 24 int main(void) { char buf[ENOUGH_LONG_LENGTH]; FILE *fp; int miyazaki = 0xefBeadDe; strcpy(buf, "ef Be ad De"); fp = fopen("test.txt", "wb"); fwrite(&miyazaki, sizeof(int), 1, fp); fclose(fp); return 0; }
334 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 10:54:03 ] お題 (次>>350 ) 文字コードに関係の無いURLデコード %と16進文字2桁を標準入力(コマンド引数、ファイル以外)から入力して、 バイナリーに変換し、test.txtファイルに落とす。 %の後に2桁の16進文字が続かない場合は、変換しないでそのまま出力する。 例: %Y %0X ⇒ 出力無し %Y0 ⇒ '0'出力 %00 ⇒ '\0'出力 %Aa01 ⇒ '\xaa' '0' '1'出力
335 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 09:13:37 ] >>281 日本語でオス #include <iostream> #include <vector> using std::cin; using std::cout; using std::endl; using std::vector; const int NUM_SIZE = 5; int main() { int i, temp = 0, sum = 0; vector<int> intContiner; cout << "5つ数を入力して下さい。" << endl; for( i = 0 ; i < NUM_SIZE ; ++i ) { // 上のfor文内でiを宣言するなら、sumやtempも移動すべき場所があるべきだろう。 cout << i + 1 << "番目入力" << endl; cin >> temp; intContiner.push_back( temp ); } cout << "5つ数の合計" << endl; vector<int>::iterator itr = intContiner.begin(); for( ; itr != intContiner.end() ; ++itr ) { sum += *itr; } cout << sum << endl; cout << "5つ数の平均" << endl; cout << sum / NUM_SIZE << endl; }
336 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 17:16:25 ] >>335 >282
337 名前:デフォルトの名無しさん [2010/06/06(日) 15:00:48 ] 問題: ジョンにとって縁起のいい数字は4と7で, 他はどうでもいい.ラッキーナンバーとは, 縁起のいい数字を含んだ10進数である. 整数aとbが与えられたとき,aとbの間にあるラッキーナンバーの個数を挙げよ. オブジェクトの定義: クラス名 : TheLuckyNumbers メソッド名 : count 引数の型 : int,int 返値の型 : int メソッドの表記 : int count(ints,intb) として,公的メソッドとせよ. 注: aの値は1から1,000,000,000まで bの値は1から1,000,000,000まで TopCoderでグーグル先生に聞いたら出てきた問題を適当に張ってみる
338 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 19:38:26 ] a〜b=(1〜b)−(1〜a){a,b:a<b} ここまで分かった。
339 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 18:49:53 ] >>337 できたぞ #include <iostream> #include <cmath> using namespace std; class TheLuckyNumbers { public: int count(int s, int b); }; int TheLuckyNumbers::count(int s, int b) { int digits=0,temp; int k=0; if(s<1 || s > 1000000000 || b<1 || b > 1000000000) return 0; for(int i=s;i<=b;i++) { temp=i; while(temp){digits++;temp/=10;} temp=i; while(digits) { if(temp % 10 == 4 || temp % 10 == 7) k++; temp/=static_cast<int>(pow(10.0,digits)); digits--; } } return k; }
340 名前:339 [2010/06/12(土) 19:07:36 ] temp/=static_cast<int>(pow(10.0,digits)); digits--; じゃなくて temp/=static_cast<int>(pow(10.0,--digits)); だな。
341 名前:339 mailto:sage [2010/06/12(土) 19:25:34 ] 全然間違ってた while(digits) { if(temp % 10 == 4 || temp % 10 == 7) k++; temp/=10; digits--; } で最後だ
342 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 10:22:47 ] if(s<1 || s > 1000000000 || b<1 || b > 1000000000) return 0; は必要。 始めにdigitを求め無くても、tempを10で割って行ったら0になる、 そうするともっと早い修正になる。
343 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 10:55:40 ] >>341 7777とかだと一つの数字で+4されないか?
344 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 11:27:16 ] >>343 そうだな 7777→1個だな まぁすぐ直せるだろうけど
345 名前:344 mailto:sage [2010/06/13(日) 11:51:22 ] #include <iostream> using namespace std; class TheLuckyNumbers { public: int count(int s, int b); }; int TheLuckyNumbers::count(int s, int b) { if(s<1 || s > 1000000000 || b<1 || b > 1000000000) return 0; int digits=0,temp; int k=0; for(int i=s;i<=b;i++) { temp=i; while(temp) { if(temp % 10 == 4 || temp % 10 == 7){ k++; break;} temp/=10; } } return k; }
346 名前:342 mailto:sage [2010/06/13(日) 12:25:23 ] temp%10は2回やる必要なくてtmp=temp%10とかで、俺もやった。
347 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:13:26 ] Javaで貼ってもよかとですか?
348 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:24:40 ] >>347 リンクならOK 本体は pc12.2ch.net/test/read.cgi/tech/1268003943/l1
349 名前:347 mailto:sage [2010/06/13(日) 13:33:56 ] ほい pc12.2ch.net/test/read.cgi/tech/1268003943/674
350 名前:348じゃばじんすげえ mailto:sage [2010/06/13(日) 14:47:13 ] class TheLuckyNumbers { public: inline static int count(int a, int b) { if (a < 1 || a > 1000000000 || b < 1 || b > 1000000000 || a > b) return 0; return count(b) - count(a - 1); } private: inline static int count(int a) { int result = 0, digits/*=0*/, add = 0; if ((digits = search(a)) != 0) { result = a % digits; a -= result; result += 1; } digits = 1; while (a != 0) { for (int i = 0, j = a % 10; i < j; i++) { result += (i == 4 || i == 7) ? digits : add; } a /= 10; add = add * 8 + digits * 2; digits *= 10; } return result; } private: inline static int search(int a) { int result = 0; for (int digits = 1; a != 0; digits *= 10, a /= 10) { if (a % 10 == 4 || a % 10 == 7) { result = digits; } } return result; } };
351 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 00:35:58 ] >>350 コメントくらい書こうぜ。 つーか、問題文にはsの方がbより小さいとは書いてないみたいだけれど。 >>337 再帰でやってみた。 codepad.org/3FZQcU4D