![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
課題を解いて欲しいです。。。
パーティでビンゴ大会を行おうとしている。
そのビンゴでは1~n の数字をコンピュータを用いてひとつずつ取り出すのだが、そのプロ
グラムがまだ完成していない。
1. n=200 としたとき、あなたが考えた実行方法をコーディングしなさい。
2. インターネットを用いて最適と思われる方法を探しだし、同様に n=200 としてコーデ
ィングしなさい。
3. 1 と2 の方法について実行時間を計測しなさい。
4. 1 と2 の方法をそれぞれ考察しなさい。
ただし、1、2、共にそれぞれどのような考え方で行ったか、説明を付随する。
全くわからないのでお願いします。
No.6
- 回答日時:
1.とりあえず適当に作ってみた
unsigned long random( unsigned long min, unsigned long range )
{
/* 乱数の種を作る */
static unsigned long seed = 0;
if( !seed )
{
time_t ltime;
time( <ime );
seed = ( unsigned long )ltime;
}
/* 乱数発生のアルゴリズム(テキトーなので考察もなし) */
seed = seed * 123456789 + 123456789;
/* 乱数を指定の範囲内の数値に変換する */
return ( min + seed ) % range;
}
int main(int argc, char* argv[])
{
int ii;
/* 1~200までの数字が入った配列を用意する */
unsigned long numbers[ 200 ];
for( int ii = 0; ii < 200; ii++ )
{
numbers[ ii ] = ii + 1;
}
/*計測するならここで開始*/
/* 乱数で配列をシャッフル(10000万回もいらんかも) */
for( ii = 0; ii < 10000; ii++ )
{
unsigned long pos1 = random( 0, 200 );
unsigned long pos2 = random( 0, 200 );
if( 200 <= pos1 || 200 <= pos2 )
{
return -1;
}
/* 入れ替え */
unsigned long temp = numbers[ pos1 ];
numbers[ pos1 ] = numbers[ pos2 ];
numbers[ pos2 ] = temp;
}
/*計測するならここで終了*/
/* ランダムに入れ替わった配列を表示する */
for( ii = 0; ii < 200; ii++ )
{
printf( "%u\n", numbers[ ii ] );
}
return 0;
}
2.メルセンヌツイスタというアルゴリズムがすごいらしいです。
3.それぞれのアルゴリズムで計測するだけ
4.方法を考察となると、アルゴリズムを理解してないのでわかりません。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?e8efa67)
No.5
- 回答日時:
かなり最悪に近いソース。
こんなソースでも、最近は一瞬で終わるんだと、ちょっとびっくりした。
#include <stdlib.h>
#include <stdio.h>
int main()
{
int doneNumber[200] = {0};
int i;
// インデックスとしては、1 - 200 じゃなくて、 0 - 199 を使う
while(1)
{
int n = rand(); // ひとつ番号を出してみて
if (n < 200) // 200未満ならいけそう
{
if (! doneNumber[n]) // その場号がまだでてなければ、
{
doneNumber[n] = 1; // 番号がでたという印をつけて
printf("%d\n", (n + 1)); // 表示
}
}
for(i = 0; i < 200; i++)
{
// 全部の数字が出たかどうか確認するためのループ
if (! doneNumber[i]) break; // まだ出てない数字があれば、ループを抜ける
}
if (i >= 200) // 全部カウントした == 出てない数字はない
break;
}
return 0;
}
No.4
- 回答日時:
(1)は指摘されている通り、貴方の考えた実行方法でコーディングすると云う事ですから
貴方が何も考えていない状態では1を解く事は不可能です
(2)も回答は一つではなく、貴方が「最適と思った方法」を探し出すのが課題ですね
(3)の実行時間の計測はプログラム的に行うでしょうから、その辺りなら1,2を元に
こちら側で出来るかもしれませんね
(4)は1,2が決まっていない現状でお答えする事が出来ません。
課題を出す側もしっかりと考えられて出しているのでしょう
こうやって質問したり、回答丸写しの人がいる事を想定して出されている問題だと言う事です
・普通のビンゴであれば同じ数字は2度出る事は無い
条件が付いていないので自由だが、考えるべき
※プログラムだとたまに2度出る物もあるが、ビンゴとしての意味は無い為
・完全にランダムである事が求められる
・背景としてパーティーなので、それなりの物を。
No.3
- 回答日時:
別解。
実行開始時刻をシステムから得る。
int配列に下記の初期値をループ処理で入れる。
x(1)=1,
x(2)=2,
x(n)=n,
・・・・・・
x(200)=200
ループ100回:
ランダム関数で1~200の間の整数乱数y,zを発生させる。
x(y)の値とx(z)の値を入れ替える。
x(1)~x(200) を出力する。
処理終了時刻をシステムから得る。
No.2
- 回答日時:
1 に「あなたが考えた実行方法をコーディングしなさい」と書かれているんだから, そこはあなたが考えてください. それとも, あなたは他人が作ったものを「自分が作りました」と偽るつもりですか?
その「実行方法」を書いてくれれば, ひょっとしたら 3 あたりはやってくれる人がいるかもしれんけど.
No.1
- 回答日時:
実行開始時刻をシステムから得る。
int配列を設定し,下記の初期値をループ処理で入れる。
x(1)=1,
x(2)=2,
x(n)=n,
・・・・・・
x(200)=200
また,
出力回数=0
ループ:
出力回数=200ならループを抜ける。
ランダム関数で1~200の間の整数乱数yを発生させる。
x(y)>0 であれば,
求める値=x(y), x(y)=0, 出力回数++
x(y)=0 であれば,x(y)>0 になるまで再帰処理。
処理終了時刻をシステムから得る。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 哲学 人間はカオスだ!?:国家権力の三権分立と神なる三位一体とのフラクタル構造? 56 2022/11/28 17:29
- 労働相談 有給休暇使用時の賃金の計算方法について 5 2022/04/04 00:02
- 大学受験 大学受験 辛い 英語 読めない こんにちは。 現在大学受験をしてる者です。 色々あり浪人なんですけど 11 2022/09/06 12:03
- その他(ビジネス・キャリア) 休憩室に設置したキャビン内での不適切行為に対する事業者としての措置 1 2023/03/04 14:55
- 哲学 政治とは 共同自治であり 愛である。 2 2022/04/02 10:57
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- 政治 農地解放から75年経過してますが、この時の実態調査資料は国民に開示されているのですか? 2 2022/10/29 20:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
組み合わせと順列 アルゴリズム
-
switch文のエラーについて
-
C++での <iostream.h>と<iostre...
-
string型のフォーマット書式指...
-
VHDLのsignedとunsignedの違いは?
-
C言語
-
プログラムの実行時に'<'でリダ...
-
信頼区間の1.96や1.65ってどこ...
-
複数桁10進数の*桁目だけを抽出...
-
数学 確率変数Xは、X=2またはX...
-
Enterキーを押されたら次の処理...
-
反転した数値を表示させるやり方
-
2÷3などの余りについて
-
中学生で数学です。 √84nが自然...
-
「Aに対するBの割合」と「Aに対...
-
ボール同士の衝突
-
std::set<int> で、ある値が何...
-
変数とパラメータとは違うもの...
-
漢字のソートについて
-
charでの計算?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
空ENTERの判別
-
C++でShowCursorを使いたい。
-
なぜ、C++の標準ヘッダをインク...
-
#define中の#のエスケープ
-
C++で、テキストファイルを一行...
-
gccでコンパイル時のエラー
-
C言語のエラーを修正したい
-
#include "fstream.h"
-
C言語のポインターで詰まっている
-
リモートデスクトップの接続元I...
-
構造体配列のvectorへの変換と...
-
JPEGやPNGが読めるLoadImage関数
-
VS2019でofstreamが未定義になる
-
構造体に決められた文字列を入...
-
VHDLのsignedとunsignedの違いは?
-
std::wstringのメモリリークに...
おすすめ情報