【C,C++】 ちょっと ..
82:デフォルトの名無しさん
10/02/19 15:50:26
[1] 授業単元:
[2] 問題文(含コード&リンク):
一次方程式y=a*x+bにおいて、A[x1,y1]とB[x2,y2]が与えられた時、
方程式の係数a,bを求めよ。
x1 y1: 450 454.4
x2 y2: 452 454.8
y=0.2*x+364.4
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (Visual C++)
[3.3] 言語: (C++/CLI C/Win32API C++/MFC いづれか)
[4] 期限: ( なし )
[5] その他の制限: ( GUIまたはgetc()で終わること)
83:デフォルトの名無しさん
10/02/20 15:41:01
>>82
宿題はスレ違い
84:デフォルトの名無しさん
10/02/28 08:23:12
#include <malloc.h>
#define MAXSIZE 20
typedef double WORD;
main(){
WORD (*b)[100];
WORD *a[2];
int i=1,j=1;
b = malloc(sizeof(WORD)*MAXSIZE*2);
a[0] = malloc(sizeof(WORD)*MAXSIZE);
a[1] = malloc(sizeof(WORD)*MAXSIZE);
b[i][j] = 0;
a[i][j] = 0;
/* [と]を使わない方法は?*/
b[i][j] = 0;
a[i][j] = 0;
}
85:デフォルトの名無しさん
10/02/28 17:47:41
>>84
b??(i??)??(j??) = 0;
a??(i??)??(j??) = 0;
86:デフォルトの名無しさん
10/02/28 19:14:14
b<:i:><:j:> = 0;
a<:i:><:j:> = 0;
87:デフォルトの名無しさん
10/03/03 03:08:44
>>86
すげー、ほんとにコンパイル通る。
それなんて名前なの?記号だけなのでググりようがない。
88:デフォルトの名無しさん
10/03/03 22:31:16
memset() すりゃいいんでないの?w
89:デフォルトの名無しさん
10/03/04 09:47:49
0で初期化したいんならcalloc()でいいだろw
*(*(b + i) + j) = 0;
*(*(a + i) + j) = 0;
90:デフォルトの名無しさん
10/03/04 20:52:47
>>87
ダイグラフ
91:84
10/03/04 23:36:37
>>89
WORD (*b)[2]; // まちがえた
92:デフォルトの名無しさん
10/03/07 02:46:41
>>90
とんくす
日本語じゃ情報少ないのな。英語だとWikipediaにのってるが
93:84
10/03/07 08:18:53
Trigraph
× トリグラフ
○ トライグラフ
URLリンク(dic.yahoo.co.jp)
94:デフォルトの名無しさん
10/03/22 09:38:47
コンパイラ名とバージョン: (Visual C++)
作業用フォルダの所は空白、ソースと同じフォルダにショートカットは有ります。
ショートカット「Visual Studio 2005」
から cl xxx.cpp するのが面倒な場合はどのようにするのでしょうか。
PATHをずらっと並べるのは無しで.batのみで可能でしょうか?
95:デフォルトの名無しさん
10/03/23 01:04:08
>>94
まず、ここは質問スレじゃない。
さらに、それはC/C++の問題ではない。
96:デフォルトの名無しさん
10/03/23 10:09:52
C#, C♯, C#相談室 Part55
>>95 返信サンキュこちらで聞いてきます。
97:デフォルトの名無しさん
10/03/27 21:58:00
>>2
【C++言語歴】 15時間
【レベル】 超ド素人
【コンセプト】 えっ・・と・・・
【コメント】 参照?ポインタ?構造体?クラス?イミフ
#include <iostream>
using namespace std;
int main() {
double a, b, c, d, e, sum;
cout << "5つの数の合計と平均値を出力します。" << endl;
cin >> a >> b >> c >> d >> e;
sum = a + b + c + d + e;
cout << "合計は" << sum << "で、平均は" << sum/5 << "です。" << endl;
}
98:デフォルトの名無しさん
10/03/28 08:36:40
>>2
【レベル】 プロ
#include <iostream>
using namespace std;
struct Average {
int count;
double total;
Average() : count(0), total(0.0) {}
};
int main(){
Average a;
double data;
for(int i=0; i<5; i++){
cout << "Input Number:";
cin >> data;
a.total += data;
a.count++;
}
cout << "total=" << a.total << endl;
cout << "average=" << a.total/a.count << endl;
}
99:デフォルトの名無しさん
10/03/28 17:21:22
次の問題は>>100
100:デフォルトの名無しさん
10/03/29 10:53:12
【問題】
点A、点B、点Cがあり、点Aと点C、点Cと点Bがそれぞれ線分ac、線分bcで結ばれている。
点A、点Bの座標(Pa(xa, ya), Pb(xb, yb))と線分の長さ(Lac, Lbc)が与えられたとき、点Cの座標を求めよ。
但し、解は一つとは限らない。
また、与えられた座標または長さが不適切で求められない場合はそれと判るようにすること。
# 作図的には点A、点Bからそれぞれ半径Lac、Lbcの円を書いて交点を求めればいいが……
101:デフォルトの名無しさん
10/03/29 15:59:04
もっとゆとりでも解けるような問題が欲しいよ
102:デフォルトの名無しさん
10/03/29 16:14:25
ユークリッド平面でいいの?
103:デフォルトの名無しさん
10/03/29 16:41:57
>>101
それじゃ、次の制約でどうぞ。
・ya == yb, Lac == Lbc
>>102
非ユークリッド平面だと私自身がついていけないからパスw
104:デフォルトの名無しさん
10/03/29 16:45:45
要は三角不等式と2円の交点でしょ?
105:デフォルトの名無しさん
10/03/29 18:16:54
2つの球の交線(円)かもしれん
106:デフォルトの名無しさん
10/03/30 01:39:29
これってA点を (0,0) に移動して
計算するとわりと簡単?
107:デフォルトの名無しさん
10/03/30 14:41:15
いや計算量は変わらん
むしろ座標系を回転して >>103 が正解(ry
108:デフォルトの名無しさん
10/04/13 22:08:11
>>26のさ
for(i=0; i<MAX_NUM; i++){
// printf("何かの数:");
if(scanf("%lf", &data ) != 1) break; ←この文
// printf("%g\n", data);
sum += data;
}
ifの中身がよくわからんないんだけどどうなってんの?
109:デフォルトの名無しさん
10/04/14 00:10:05
>>108
if(!(scanf("%lf", &data))) break;
は
if(!(scanf("%lf", &data))!=0) break;
と変形した後に
if(scanf("%lf", &data)==0) break;
と変形するのが正しい
※論理否定は必ず否定が掛かっている方の真偽を逆にする
と言っても、cinの定義なんか覚えてないから
単純に戻り値をscanf()に置き換えて良いかは知らんので
そこら変は他の人にまかせる
110:109
10/04/14 00:15:40
※論理否定は必ず否定が掛かっている方の真偽を逆にする
って書いたけど、何か違うな…
正確には、偽で比較するって言うか、真で比較しては駄目っての言うのが正しいのか?
111:デフォルトの名無しさん
10/04/14 00:20:39
そもそも>>108が分からないのがifの何なのかが俺には分からない。
112:デフォルトの名無しさん
10/04/14 00:27:56
>>109-110
ごめんよくわかんない
>>111
if文の()の中身の
scanf("%lf", &data ) != 1
ってどういうこと?って意味
113:デフォルトの名無しさん
10/04/14 00:46:00
>>112
scanfの戻り値が1でない場合真
int scanf(const char* format, ...);
scanfの戻り値は"formatで指定された型に従って代入に成功した要素数"
scanf("%lf", &data )
↑でdataに代入成功すれば1が返る 失敗すれば多分0(scanfなんて使わないから分からない)
114:デフォルトの名無しさん
10/04/14 00:57:19
>>112
今回の要素数は1個なので>>118のように変形しても大丈夫だが
2以上の数値が変える場合、変形には気をつけないとね
NG例
!(2) != 0
両辺に論理否定をかけて
!(!(2)) != !(0)
左辺の二回の論理否定を打ち消すと
2 != !(1)
さらに変形すると
2 != 1
真になってしまう
OK例
!(2) != 0
両辺に論理否定をかけて
!(!(2)) != !(0)
変形すると
!(0) != 1
さらに変形すると
1 != 1
よって偽になる(これが正解)
115:114
10/04/14 01:00:30
>>118に期待しよう…orz
まあ、こんな感じで、ミスを避けるために、
数値の真偽を問う場合は、必ずfalse(0)と比較するってのが良く使われる。
116:デフォルトの名無しさん
10/04/14 01:17:26
>>100
答えの数までは簡単に出せるが、その先が思いつかん…
何か、結構単純な解き方になる気もするのだが…
Lab = sqrt( fabs( pow( xa - xb, 2.0 ) + pow( ya - yb, 2.0 ) ) )
ans = 0;
if( ( Lac + Lbc == Lab ) || ( Lab == fabs( Lac - Lbc ) ) ) ans = 1;
if( ( Lac + Lbc < Lab ) && ( Lab < fabs( Lac - Lbc ) ) ) ans = 2;
117:デフォルトの名無しさん
10/04/15 00:11:52
Cが2コ存在する場合要するに三角形が出来る場合
正解かどうかも分からんし考えながら起こしたのでもの凄い汚い点に注意。
double Len_AB, Len_AC, Len_BC;
double Pnt_XA, Pnt_XB, Pnt_XC1, Pnt_XC2, Pnt_YA, Pnt_YB, Pnt_YC1, Pnt_YC2;
double angle;
double Pnt_XB1, Pnt_YB1;
/*
入力部分は面倒なんで省略
値が入力されるのはLen_AC, Len_BC, Pnt_XA, Pnt_YA, Pnt_XB, Pnt_YB
Aを(0,0)に移動するとBの座標が変化する
Bの新座標は元の座標からAの座標を引けば良いので
*/
Pnt_XB1 = Pnt_XB - Pnt_XA;
Pnt_YB1 = Pnt_YB - Pnt_YA;
/*
(0,0)に移動後のAを中心にBを回転させ、Bの座標を(0,X)にする
回転させる角度は正接から出せる(tanX=Pnt_YB1/Pnt_XB1)
ついでにABの長さ(Len_AB)も出しておく
*/
angle = atan(Pnt_YB1/Pnt_XB1);
Len_AB = sqrt(pow(Pnt_XB1, 2) + pow(Pnt_YB1, 2));
/*
回転後のBのX座標は長さそのもの
*/
Pnt_XB1 = Len_AB;
118:デフォルトの名無しさん
10/04/15 00:15:16
つ*づ*き
sqrt,pow,sin,cos,atan等使ったこと無いので何か使い方間違ってるかも
/*
Cの座標を(a,b)と仮定すると、三平方の定理から
a^2 + b^2 = Len_AC^2
また、CからX軸に垂線を下ろして、交差したところをpとすると、
pの座標は(a,0)になり、更に
(Len_AB - a)^2 + b^2 = Len_BC^2
になるので、この連立式を解く
a^2 + b^2 = Len_AC^2
Len_AB^2 - ( 2 * Len_AB * a ) + a^2 + b^2 = Len_BC^2
上の式から下の式を引くと
-Len_AB^2 + ( 2 * Len_AB * a ) = Len_AC^2 - Len_BC^2
2 * Len_AC * a = Len_AC^2 - Len_BC^2 + Len_AB^2
a = ( Len_AC^2 - Len_BC^2 + Len_AC^2 ) / 2 * Len_AC
となる
*/
Pnt_XC = ( Len_AC^2 - Len_BC^2 + Len_AC^2 ) / 2 * Len_AC;
/*
CのX座標が分かったので、後は三平方の定理からCのY座標を出せる
Len_AB^2 = Pnt_XC^2 + Pnt_YC^2
*/
Pnt_YC1 = sqrt(pow(Len_AB, 2) - pow(Pnt_XC, 2));
119:デフォルトの名無しさん
10/04/15 00:17:42
お*わ*り
数学なんざやるの久々だから正しい保証はない
/*
CのY座標は負値もある
*/
Pnt_YC2 = Pnt_YC1 * -1;
/*
CのXY座標が分かったので、回転させて戻す
*/
Pnt_YC1 = Len_AB * sin(angle) + Len_BC * cos(angle) + Pnt_YA;
Pnt_XC1 = Len_AB * cos(angle) - Len_BC * sin(angle) + Pnt_XA;
Pnt_YC2 = Len_AB * sin(angle) - Len_BC * cos(angle) + Pnt_YA;
Pnt_XC2 = Len_AB * cos(angle) + Len_BC * sin(angle) + Pnt_XA;
120:デフォルトの名無しさん
10/04/15 02:00:40
cからabを通る直線上に垂線を下ろしたときの交点をdとすると垂線の長さhの2乗は
h*h = Lac*Lac - Xd*(Xd + 2*Xa) - Xa*Xa - Yd*(Yd + 2*Ya) - Ya*Ya
かつ
h*h = Lbc*Lbc - Xd*(Xd + 2*Xb) - Xb*Xb - Yd*(Yd + 2*Yb) - Yb*Yb
ここでXn = Xa - Xb、Yn = Ya - Ybとすると
a,b,dは同じ直線上にあるので、あるkに対して
Xd = Xa + k*Xn、Yd = Ya + k*Xn
が成立する
以上から変数k以外しか含まない2次方程式ができるから、解いたらkが求まる。
(kが求まらないときは三角形になっていない)
kがわかれば、dの位置が確定するから、adとcdが直角(=内積が0)、bdとcdが直角
で連立して解けばいいじゃないって… どこがプログラミングの問題だよw
121:デフォルトの名無しさん
10/04/15 02:02:15
>>120 訂正
×Yd = Ya + k*Xn ○Yd = Ya + k*Yn
122:デフォルトの名無しさん
10/04/15 02:09:26
あ、内積じゃなくて高さ求めるのかw ごめん。
でadと直角な単位ベクトルにhと-hをかけて二つ答えだしておしまいだ。
123:デフォルトの名無しさん
10/04/15 22:23:40
>>113-114
サンクス
数字だと1をかえしてそれ以外だと0かえして
ブレイクしてやんお!
ってことだよねと、わかったかんじだ
124:デフォルトの名無しさん
10/04/15 23:48:04
>>103の条件(ya == ybのみでも可)であれば、三角形ABCの三辺の長さから
ヘロンの公式で面積Sを求めて、底辺を辺Labとする高さh(座標yc)を求め
その高さと、辺Lac、辺Lbcのどちらかと、三平方の定理で座標yxcを求めて終わり
ただ>>100の条件では、やっぱり分からんわ…
double Lab, Lac, Lbc, xa, ya, xb, yb, xc, yc1, yc2, s, S, h, w;
// xa = xxx, ya = xxx, xb = xxx, yb = xxx, Lac = xxx, Lbc = xxx;
// → 解が2点となるような点であること
Lab = fabs( xa - xb );
// ヘロンの公式から三角形ABCの面積Sを求める
s = ( Lab + Lac + Lbc ) / 2;
S = sqrt( s * ( s - Lab ) * ( s - Lac ) * ( s - Lbc ) );
// → Sの計算でエラーが発生した場合解なし
// → 解が一つの場合の処理も省略しているので、解無しの処理も省略
// 面積Sから辺Labを底辺とした三角形の高さhを求める
h = S / Lab * 2;
// 三角形ABCの高さhから、座標 yc1, yc2 を求める
yc1 = ya + h;
yc2 = ya - h;
// 三角形ABCの頂点Cから垂直に降ろした点をOとする(線分COは高さhに等しい)
// 三角形ACOの垂辺CO(高さh)と斜辺Lacから底辺AOの長さwを求める
w = sqrt( pow( Lac, 2.0 ) - pow( h, 2.0 ) );
// 三角形ACOの底辺AOの長さwから座標xcを求める
// → 点A、点B、点Oの位置関係からxaに対して加算するのか減算するのかを決定
xc = xa + ( xa > xb ? 1 : - 1 ) * ( Lac < Lab ? 1 : -1 ) * w;
125:デフォルトの名無しさん
10/04/15 23:53:11
プログラマは数学出来ない人多いんだなと驚いた
126:124
10/04/16 00:04:59
> // → 点A、点B、点Oの位置関係からxaに対して加算するのか減算するのかを決定
> xc = xa + ( xa > xb ? 1 : - 1 ) * ( Lac < Lab ? 1 : -1 ) * w;
最後間違えてるな…
// → 点A、点B、点Oの位置関係からxaに対して加算するのか減算するのかを決定
xc = xa + ( xa > xb ? 1 : - 1 ) * ( pow( Lac, 2.0 ) < ( pow( Lab, 2.0 ) + pow( h, 2.0 ) ) ? 1 : -1 ) * w;
127:デフォルトの名無しさん
10/04/24 01:34:54
100の出題者はそろそろ解答書くべきじゃないの。
それに問題複数あった方がつまらない問題無視できるからいいと思う。
128:デフォルトの名無しさん
10/04/24 01:38:20
【問題1:時計】
現在時刻をアスキーアートで表示せよ
【表示例】
●●○○○●○○○○○○●○●○○●●
○○●○●○●○○●○○●○●○●○○
○●●○●○●○○○○○●●●○●●●
●○○○●○●○○●○○○○●○●○●
●●●○○●○○○○○○○○●○●●●
【難易度】
40分で初級
129:デフォルトの名無しさん
10/04/24 01:44:05
適当に作ったので面白いかどうかはしらないけれど
こんな感じの問題名、解答時間、難易度つきテンプレ希望
130:デフォルトの名無しさん
10/04/24 09:17:18
できたが、俺にはAA作りの才能がないことが分かったのと、codepadじゃ時間取得系関数動かねぇ。
URLリンク(codepad.org)
ローカルでの実行結果。
○●○○●●●○○○○○○●○○○●●
●○●○●○●○○●○○●●○○●○○
●○●○●●●○○○○○○●○○●●●
●○●○○○●○○●○○○●○○●○●
○●○○●●○○○○○○●●●○●●●
131:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/24 09:46:00
○があると読みにくいので
スペースに置き換えてください
ずれないように注意出来たら二段
133:130
10/04/24 10:10:14
うげぇ、配列サイズ足りてねぇorz
134:131
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/24 14:12:24
URLリンク(www2.ezbbs.net)
このパズルを解くプログラム
137:デフォルトの名無しさん
10/04/24 14:19:04
>>136
すまんがシラミツブシは興味ないんよ
それより論理的にさ
ここに1を置いたら絶対全部の合計は等しく出来ないから
1はこっちかこっちにしか置けない
っていう風に考えたい訳
138:デフォルトの名無しさん
10/04/24 16:38:16
>>136程度だと総当たりでも十分速いだろなぁ。
それ書くくらいならナンプレの答え探すプログラムの方がいいんじゃね?
139:デフォルトの名無しさん
10/04/24 18:04:37
>>136がわからない
なにこれどうすんの?
140:デフォルトの名無しさん
10/04/24 18:33:55
総和が5の倍数であることを利用するとあまる数字の組み合わせを何個かに限定できるかな
141:デフォルトの名無しさん
10/04/24 18:49:23
1~10の総和は55
和がすべて等しいので
和の値は55/5=11
4個の和で11になる組み合わせを選ぶ
142:デフォルトの名無しさん
10/04/24 18:59:23
え?
143:デフォルトの名無しさん
10/04/24 19:04:15
>>141
それで解けたら1億やるよw
144:デフォルトの名無しさん
10/04/24 19:09:01
>>141でやるとかむずいな
145:デフォルトの名無しさん
10/04/24 19:10:17
むずいとかじゃなくて、解がない
146:デフォルトの名無しさん
10/04/24 19:18:42
4個の和が11じゃねーだろw
全ての位置は2回数えられるから2倍にして4個の和が22になる組み合わせを選ぶ。
まあ、それでも解はないんだけどねw
147:デフォルトの名無しさん
10/04/24 19:22:28
>>136
7-11いい気分
148:デフォルトの名無しさん
10/04/24 19:26:21
>>147
プログラムお願いします
149:デフォルトの名無しさん
10/04/24 19:27:16
宿題スレのでも見とけ
150:デフォルトの名無しさん
10/04/24 19:55:56
数学の問題にも著作権はあるんだからパクリはいくない
151:デフォルトの名無しさん
10/04/24 23:22:00
問題
ジョーカーを除いたトランプ1組(52枚)で下記のルールで神経衰弱を行った場合、
最大何手必要なのかを求めるプログラム。
※但しコンピュータは最善の手を実行するものとする。
1. 52枚を適当にシャッフルしカードを伏せる(ことにする)
2. カードを2枚めくる(この行為を1手と数える)
2-1. 同じ数字であれば表にする(ことにする)
2-2. 異なる数字であれば、それらの数字を覚えて裏に戻す(ことにする)
3. 全てのカードが表になった(ことになった)ら終了
152:デフォルトの名無しさん
10/04/24 23:51:13
>>151
それも数学の問題。プログラミングできないなら無理に出題しないでいいよ。
答えは全てのカードを覚えるのにかかる回数26回と
全てのカードを取るのにかかる回数26回の合わせて52回。
153:デフォルトの名無しさん
10/04/25 00:02:36
>>152
不正解
覚えるのは25回で十分
154:デフォルトの名無しさん
10/04/25 00:16:41
いや26回だ
155:デフォルトの名無しさん
10/04/25 00:21:08
>>154
指摘してやってるのに分からんいなんてアホなのか?
25回覚えて、取り始めは、残った2枚のうちの1枚から始めれば良い。
(1枚取った時点で全てのカードが把握できる)
156:152
10/04/25 00:31:34
>>155
言われみればそうだね。でも154はおれじゃねえ。
157:デフォルトの名無しさん
10/04/25 00:44:56
いや合わせて50回だ
158:デフォルトの名無しさん
10/04/25 00:50:12
そうだorz
159:デフォルトの名無しさん
10/04/25 00:51:41
>>157
>いや合わせて50回だ
何を合わせるんだ?
160:157
10/04/25 01:23:37
最大40手 50回は間違い
161:デフォルトの名無しさん
10/04/25 01:24:10
最大52回
162:デフォルトの名無しさん
10/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
10/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:デフォルトの名無しさん
10/04/25 04:07:54
1と2だけの8枚のとき6回、1と2と3だけの12枚のとき10回だから、52枚なら50回が正解
165:デフォルトの名無しさん
10/04/25 06:15:43
なかなか難しいなw
結局何手が正しいのかわからないが、ネットワーク対戦とか少し面白そうと思ってしまったww
166:デフォルトの名無しさん
10/04/25 07:51:20
方法はともかく、トランプの持つ情報量考えたら下限は見えてくるんじゃないかなぁ。
トランプの並べ方は52!/(4!^13) = 249987600 (27.897 bit)
けど、引いたカードをどう考えればいいんだろう。
最初は1/13の確率で引くカードを予言できるから、1枚引くと3.7 bit得られることになるんだが、
2枚目以降は引くカードによって得られる情報量が変わってくる。
167:デフォルトの名無しさん
10/04/25 08:47:00
分かった。正解は39回だ。
各々の数に対して、丁度半分の2枚づつの情報が分かればOK。
1枚目は必ず知らない情報のカードをめくる。
そのカードの数の情報が1枚以下しか出てない場合、次に引くカードは知らない情報のカード。
2枚分かっていれば、分かっているカード組み合わせて表にしておく。
これを繰り返していけば、最悪、39回で全てのカードを表にできる。
168:デフォルトの名無しさん
10/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
10/04/25 09:05:18
何か少しだけ違う気がするな。
数の種類が奇数だと、+1回になりそうな気もするし、
>>155と組み合わせられる気もするし
無理やり取ってしまえば、上手く行きそうな気もする…。
細かいところまでは分からんが、正解は38〜40回のどれか
170:169
10/04/25 09:07:05
>>168
おー、言われてみれば、そうだね。
2枚目が、被る場合も場合もあるのか…。
なかなか、上手くいかんの…
171:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/25 10:08:20
>>171
つまり、あれか?
情報がなんちゃらかんちゃら考えずに
分かってる組み合わせで取ってくのが最善手ってことか?
173:デフォルトの名無しさん
10/04/25 10:12:51
取れるカード開いたときにとらないのはどう考えても開く回数の無駄だし。
174:デフォルトの名無しさん
10/04/25 10:33:12
1枚目開いて知ってるのが出てきたときは、取らないと損。
2枚目で知ってるのが出たときは、取らなくてよい(取ったら損する場合があるが、取って得する場合はない)
175:デフォルトの名無しさん
10/04/25 10:43:38
>>171
> しかし、同じ開く順番なら
> A_1-B_2 C_1-A_1 D_2-B_2 clear3
これは3手目以降が変わっていくのでは?
176:デフォルトの名無しさん
10/04/25 13:06:56
[最悪のケース]
裏がえしのカードをめくると既に見たことのある数字がでまくる
(なければどれでも同じ)
ただし裏がえしのカードを二枚同時にめくったときは
二枚目は一枚目と違う数字の中から既に見たことのある数字がでまくる
(なければ一枚目と違う数字ならどれでも同じ)
最後の裏がえし4枚は同じ数字なのでめくると同時にとれる
だから52-2で50回だっつーの、とっくに結論でてるだろ
いい加減スレ違いなんだから終わりにしろよ
177:デフォルトの名無しさん
10/04/25 13:20:30
2枚同時じゃなきゃにめくれないのか。onz
178:デフォルトの名無しさん
10/04/25 13:34:31
どうしても理解できない人は、まだ開けたことのない所のカードをめくると
1 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4 …
の順番にでてくる神経衰弱のプログラムを作ってみればいいんじゃない
50回だからw
179:デフォルトの名無しさん
10/04/25 13:44:16
神経衰弱に2枚同時なんてルールはねーだろw
180:デフォルトの名無しさん
10/04/25 14:00:57
ごめん39だわ…
181:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/25 14:47:51
182で正解のような気がするが
184:デフォルトの名無しさん
10/04/25 15:01:48
マスターマインドというゲームがあります
4つの中身が不明な箱と
そのなかに4色のボールが入っていて
(同じ色は何度でも使えます)
中身を知らない方の人が4つ箱に入っているボールの色を予想して
中身を知っている方の人が
1.色だけがあっている数
2.色と場所があっている数
を教えます(ウソはつかないものとします)
正解を出すのに最低何回質問をすればよいでしょうか?
185:160
10/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:デフォルトの名無しさん
10/04/25 15:08:16
数学
URLリンク(science6.2ch.net)
よし、とりあえず板移動w
187:GAME
10/04/25 15:20:18
ロよッもテ動かせ
URLリンク(i-libro.net)
188:デフォルトの名無しさん
10/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
10/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:デフォルトの名無しさん
10/04/25 16:26:40
質問するスレ間違えたようなので引っ越します
191:デフォルトの名無しさん
10/04/25 16:59:55
バイバーイ
192:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/25 21:50:26
>>184
最低だと、1でいいんじゃないのか?
194:デフォルトの名無しさん
10/04/25 21:55:38
バカがいるw
195:デフォルトの名無しさん
10/04/25 22:40:43
>>194
いや、そのくらい軽くこなさないとマインドシーカーはクリアできないよ。
つーか終盤になると質問すら出来んレベル
196:デフォルトの名無しさん
10/04/25 23:07:26
>>194
ん?1回目で当たったら1になるんじゃないのかい?
問題の不備だとは思うが。
197:デフォルトの名無しさん
10/04/26 00:04:50
>>152
42回が正解
URLリンク(codepad.org)
198:デフォルトの名無しさん
10/04/26 01:04:46
>>130
仕事はやいですね
cpyすっごいならんでるよ
>>131
品質△ (悲
次はもっといい問題作ってきます
作者の自己解答上げておきます
URLリンク(codepad.org)
199:160
10/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
10/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
10/04/26 03:19:16
やっぱ46回になる。
URLリンク(codepad.org)
また、「カードの総数 - 数字の数 / マークの数」
みたいな式でもあらわせるかも。
202:デフォルトの名無しさん
10/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
10/04/26 07:42:45
>>202
それは、後に出てくるのが分かっている上での最善の手の気もする。
>>151に↓と書いてあるけど、この解釈の仕方により変わるので難しいが。
※但しコンピュータは最善の手を実行するものとする。
作者さんの答えきぼん。
204:デフォルトの名無しさん
10/04/26 08:07:04
2回目のめくりである札の2枚目がわかったときに、
次の手でその2枚を取るのはどう考えても悪手。
205:189
10/04/26 09:30:20
45.5 というか やっぱり 46回だ。
>>188なら>>204の作戦にも強い。ID無いのが残念。
206:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/26 09:53:03
>>189で言うと (A_4-B_4) これが悪手
208:デフォルトの名無しさん
10/04/26 10:04:01
207は忘れてくれww
209:デフォルトの名無しさん
10/04/26 10:10:00
悪手は悪手だよ。
C_4とD_4が2回目のめくりで出てるから回数には影響しないってだけで。
210:デフォルトの名無しさん
10/04/26 10:58:00
もうトランプの話題はいいだろ。
最大値は計算するまでもないわけだから、
期待値とかどう?
211:デフォルトの名無しさん
10/04/26 11:25:44
>>210 最大値は43だろ。
212:デフォルトの名無しさん
10/04/26 14:57:10
She never eats NONI.
213:192
10/04/26 17:46:05
>>204
分かったかも。
覚えるのに2ターン、取るのに1ターンの3ターンかかり無駄という感じか。
2枚目で覚えているのを取れば、覚えるのに1ターン、取るのに1ターンにできる。
厳密には、覚えたのが1枚残るから、3-1=2、2-0.5=1.5ターンという感じか。
214:デフォルトの名無しさん
10/04/26 18:12:45
>>189
開いてないC13を分かってるカードに分類しちゃだめだろw
215:100
10/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:デフォルトの名無しさん
10/04/26 18:43:33
円の方程式を二つつくる
引く
ax + by = cができる
円の方程式の片方に代入して解の公式を使う
解がある場合にax + by = cに代入すれば座標が求まる
217:デフォルトの名無しさん
10/04/26 23:48:45
>>198
なるほど、printfに%.8sなんて使い方あったのですか。目から鱗。
218:デフォルトの名無しさん
10/04/27 02:28:28
>>184
面白い。
最初はバラバラに予想して何色存在するかを見るのがいいのかな。
219:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/29 11:32:36
正しく(もっとも効率よく)質問をするプログラムを作るのも難しくて面白いと思われ
221:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/01 06:22:15
>>221
なんで13〜21手の所でペア取っちゃうんだ?
223:デフォルトの名無しさん
10/05/01 06:24:43
そうじゃないと手数が増えるからだろw
224:デフォルトの名無しさん
10/05/01 06:34:35
残しておいて3枚目引いたときに取った方が手数減ると思うが
225:デフォルトの名無しさん
10/05/01 06:37:06
2枚目をめくった時に3枚目を引いたら、4枚目が出るまでスルーな
226:デフォルトの名無しさん
10/05/01 06:39:47
3枚目、4枚目がめくりの2枚目に出る可能性がある以上、
一回目のめくりで2枚目が出たら次に1枚目をめくるのが正しい。
227:デフォルトの名無しさん
10/05/01 06:42:23
>>226
13種類の絵柄で、めくりの2枚目で3枚目4枚目を出せるのは何種類だ?
228:デフォルトの名無しさん
10/05/01 06:46:20
何種類とか関係意味わかんねーよw
だいたい、とっておいてもその場でめくるよりめくる回数増える可能性こそあれ、
減る可能性は全くないのにw
229:デフォルトの名無しさん
10/05/01 06:49:11
>>228
じゃあ言い方を変えるわ。
>>224-225の取り方で最大何手になるよ
230:デフォルトの名無しさん
10/05/01 06:51:17
残した方が手数が減るって主張してるのはお前だろ?
46手より小さい手をお前が示さなきゃだめだろw
231:デフォルトの名無しさん
10/05/01 06:59:47
>>230
>>206
232:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/01 07:30:51
50手か
234:デフォルトの名無しさん
10/05/01 07:33:58
結局並びかたによって2枚目の時点でとるか、3枚目まで待つかどっちがいいか
一概には言えないってことか。
235:デフォルトの名無しさん
10/05/01 10:54:01
>>234
3枚目まで待った方がいい。そしてそれは>>174が既に指摘してる。
待っても待たなくても同じか、待った方が手数減るかのどっちかで
待たない方が手数減るパターンは有り得ないのだから、待った方がいい。
引いた時点で、待っても得しないと分かりきっている場合は引いてしまってもいいが、別に引くメリットはない。
236:デフォルトの名無しさん
10/05/01 11:18:12
>>235
お前はちょっと前の>>232すら見えないのか?
237:デフォルトの名無しさん
10/05/01 11:36:01
>>236
一概には言えないなんてとぼけたこと抜かしてるから、
常にとらなければいいと言ってるだけ。
238:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/01 11:44:13
はぁ?
>>232は3枚目まで待った場合に2枚目で取る場合より手数が増えるパターンなんだけど?
240:238
10/05/01 11:47:35
同意
241:デフォルトの名無しさん
10/05/01 11:49:47
わかってると思うけど>>239は>>235=>>237へのレスね
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5399日前に更新/118 KB
担当:undef