事例:全部で7つの箱があり、1つの箱にはボール1だけを入れることができる。
1つの箱だけにボールが入ることもあるし、7つ全部の箱にボールが入ることもある。
箱にボールが入る組み合わせは何通り考えられるか?
http://e-words.jp/w/2E980B2E695B0.html
2進数とは 【binary number】 - 意味/解説/説明/定義 : IT用語辞典
7ビットの二進数で表せる数と同等と考えられるので
答えは2の7乗で、128通りです。
Cなら
Boxes = 7;
Ans = pow(2, Boxes );
といった感じかと(未確認
http://www.hatena.ne.jp/1078293559#
下記の事例の全パターンと、こういったマトリックス表を簡単に作る(計算) 方法(例えばC言語のソース)でわかりやすいものを教えてください。 事例:全部で7つの箱があり、1.. - 人力検索はてな
VCで大急ぎで作ってみました。
結局7つの箱がそれぞれ0か1の2つ通りの状態が存在すると言うことで、組み合わせは2の7乗通りですので、0〜127の2進数表示みたいなもので良いのでしょうか。以下がソースです。
--8<--------------------------
#include <math.h>
#include <string.h>
voidBinString(int nValue,int nBitNum,char *pszBuf)
{
intnn;
unsigned intnBitBuf;
*pszBuf = 0;
for(nn = nBitNum - 1; nn >= 0; nn --) {
nBitBuf = nValue >> nn;
nBitBuf = nBitBuf & 0x0001;
if (nBitBuf > 0) {
strcat(pszBuf,”o”);
}
else {
strcat(pszBuf,” ”);
}
}
}
int main(int argc, char* argv[])
{
intnMax;
intnn;
charszBuf[32];
// 7つの箱の組み合わせの最大値(2の7乗通り)
nMax = (int)pow(2,7);
// 0〜最大値までの組み合わせマトリックス表示
for(nn = 0; nn < nMax; nn ++) {
BinString(nn,7,szBuf);
printf(”組み合わせ番号 %03d:[%s]¥n”,nn,szBuf);
}
return 0;
}
--8<--------------------------
ありがとうございます。
VCは明るくないのですが、Cとほとんど同じですね。
解析してC又はVBに移植して結果を試してみます。
http://www.hatena.ne.jp/1078293559##
下記の事例の全パターンと、こういったマトリックス表を簡単に作る(計算) 方法(例えばC言語のソース)でわかりやすいものを教えてください。 事例:全部で7つの箱があり、1.. - 人力検索はてな
#include <stdio.h>
void main(int argc, char* argv[])
{
int b1, b2, b3, b4, b5, b6, b7;
int count = 0;
for (b1 = 0; b1<=1; b1++)
for (b2 = 0; b2<=1; b2++)
for (b3 = 0; b3<=1; b3++)
for (b4 = 0; b4<=1; b4++)
for (b5 = 0; b5<=1; b5++)
for (b6 = 0; b6<=1; b6++)
for (b7 = 0; b7<=1; b7++)
{
printf(”%d%d%d%d%d%d%d¥n”, b1,b2,b3,b4,b5,b6,b7);
count++;
}
printf(”COUNT=%d¥n”, count);
}
ありがとうございます。
早速コンパイルして試してみます。
0から127までを2進数で表示すればよいだけですよね
#include <stdio.h>
int count;
void conv(int num){
int bit;
bit = num % 2;
num = num / 2;
count++;
if(num>0) conv(num);
printf(”%d,”,bit);
}
int main (){
int i,j;
for (i=0;i<128;i++)
{
count=0;
conv(i);
for(j=count;j<7;j++)
{
printf(”0,”);
}
printf(”¥n”);
}
return 0;
}
ありがとうございます。
入れるボールの下図によって、左から順に
番号を振りたいと考えています。
例)2進数で表示したとき
0,0,0,0,0,0,0
0,0,0,0,0,0,1
0,0,0,0,0,1,0
0,0,0,0,0,1,1
0,0,0,0,1,0,0
0,0,0,0,1,0,1
0,0,0,0,1,1,0
→左から順に入ったボールに番号を振る。
0,0,0,0,0,0,0
0,0,0,0,0,0,1
0,0,0,0,0,1,0
0,0,0,0,0,1,2
0,0,0,0,1,0,0
0,0,0,0,1,0,2
0,0,0,0,1,2,0
このようにするにはどうしたらよいでしょうか?
オブジェクト指向スクリプト言語 Ruby
Rubyのように、sprintfで2進数表示ができる言語なら簡単なんですけどね。
#!/bin/env ruby
print ”Input Number of Boxes: ”
box = gets.to_i
( 2 ** box ).times{ |i| printf( ”%0#{box}b¥n”, i ) }
ありがとうございます。
なるほど、かなり短いコードで表すことができますね。
価格.com - 「買ってよかった」をすべてのひとに。
URLはダミーです。
左から番号をつけるように作ってみました。
---------------------------------
#include <math.h>
#include <string.h>
void BinString(int nValue,int nBitNum,char *pszBuf)
{
int nn;
unsigned int nBitBuf;
int nNum;
char szNumStr[8];;
nNum = 0;
*pszBuf = 0;
for(nn = nBitNum - 1; nn >= 0; nn --) {
nBitBuf = nValue >> nn;
nBitBuf = nBitBuf & 0x0001;
if (nBitBuf > 0) {
nNum ++;
sprintf(szNumStr,”%d,”,nNum);
strcat(pszBuf,szNumStr);
}
else {
strcat(pszBuf,”0,”);
}
}
}
int main(int argc, char* argv[])
{
int nMax;
int nn;
char szBuf[32];
// 7つの箱の組み合わせの最大値(2の7乗通り)
nMax = (int)pow(2,7);
// 0〜最大値までの組み合わせマトリックス表示
for(nn = 0; nn < nMax; nn ++) {
BinString(nn,7,szBuf);
printf(”組み合わせ番号 %03d:[%s]¥n”,nn,szBuf);
}
return 0;
}
---------------------------------
ありがとうございます。
Yahoo! JAPAN
>→左から順に入ったボールに番号を振る。
少々トリッキーかつマジックナンバー埋め込みで申し訳ないですが、こんなのでいかがでしょうか。
説明が必要でしたらイワシに書きますが...分かります?
#include <stdio.h>
void main(int argc, char* argv[])
{
int i = 0;
for (i=0; i<128; i++) {
int bit;
int bn = 1;
for (bit=6; bit>=0; bit--) {
int b = (i & 1<<bit) ? bn++ : 0;
printf(”%d%s”, b, bit!=0 ? ”,”:”¥n”);
}
}
}
ありがとうございます。
簡潔ですね。大変参考になりました。
ありがとうございます。
何通りあるかはその考えでよいと思いますが、
その組み合わせ一覧を出力したいのです。
質問内容の「マトリックス表」とはこのことでした。
宜しくお願い致します。