人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

下記の事例の全パターンと、こういったマトリックス表を簡単に作る(計算) 方法(例えばC言語のソース)でわかりやすいものを教えてください。
事例:全部で7つの箱があり、1つの箱にはボール1だけを入れることができる。
1つの箱だけにボールが入ることもあるし、7つ全部の箱にボールが入ることもある。
箱にボールが入る組み合わせは何通り考えられるか?

●質問者: smileless
●カテゴリ:コンピュータ 学習・教育
✍キーワード:C言語 いもの ソース パターン ボール
○ 状態 :終了
└ 回答数 : 7/7件

▽最新の回答へ

1 ● kiichigo
●15ポイント

http://e-words.jp/w/2E980B2E695B0.html

2進数とは 【binary number】 - 意味/解説/説明/定義 : IT用語辞典

7ビットの二進数で表せる数と同等と考えられるので

答えは2の7乗で、128通りです。

Cなら

Boxes = 7;

Ans = pow(2, Boxes );

といった感じかと(未確認

◎質問者からの返答

ありがとうございます。

何通りあるかはその考えでよいと思いますが、

その組み合わせ一覧を出力したいのです。

質問内容の「マトリックス表」とはこのことでした。

宜しくお願い致します。


2 ● honey3
●15ポイント

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に移植して結果を試してみます。


3 ● ohmix1
●14ポイント

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);

}

◎質問者からの返答

ありがとうございます。

早速コンパイルして試してみます。


4 ● xnissy
●14ポイント

http://www5f.biglobe.ne.jp/~tashiro/c/5/saiki.html

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

このようにするにはどうしたらよいでしょうか?


5 ● fcd
●14ポイント

http://www.ruby-lang.org/ja/

オブジェクト指向スクリプト言語 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 ) }

◎質問者からの返答

ありがとうございます。

なるほど、かなり短いコードで表すことができますね。


1-5件表示/7件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ