数字をシャッフルする

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
MASSA

数字をシャッフルする

#1

投稿記事 by MASSA » 8年前

VC++2008とDXライブラリを使っています。

int X1.x2.x3.………,x24,x25;
というように、int型の25個の変数を用意します。
これに、1~25の数字をシャッフルして代入するプログラムを作りたいのですがどうすれば良いでしょうか。

実行するたびに違う数列が生成されるようにしたいのですが…

乱数を使ってなんとか出来るのでは…とは思いますが…
生成した数列の状態を、セーブデータみたいにして保存しておく必要はありません。
ええっと、つまり、リプレイみたいなことはしないので、乱数を保存する必要はないです。


簡単なプログラムなのかもしれませんが、まだ初心者で、考えたのですが分かりませんでした。
よろしくお願いいたします。

アバター
ぱにしん
記事: 58
登録日時: 8年前
住所: 滋賀

Re: 数字をシャッフルする

#2

投稿記事 by ぱにしん » 8年前

int X1.x2.x3.………,x24,x25;というのは配列を使ってはいけないんでしょうか?

とりあえずちょっと非効率な気もしますが、ぱっと思いつく方法としては

1、乱数を使ってX1に1~25のどれかを入れる
2、次の変数に入れる数を乱数で作り、X1~X25に入っている数字かどうかを調べ、入っていないなら代入
3、X25まで上記をくり返す

っていう感じでいいかと。
ただ、前述の通り配列を使わないとちょっと面倒なソースになりそうです。

アバター
みけCAT
記事: 6243
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 数字をシャッフルする

#3

投稿記事 by みけCAT » 8年前

ポインタで無理矢理配列にしてしまえば楽です。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
	/*変数*/
	int x1,x2,x3,x4,x5,x6,x7,x8,x9,x10;
	int x11,x12,x13,x14,x15,x16,x17,x18,x19,x20;
	int x21,x22,x23,x24,x25;
	/*ポインタ配列*/
	int* ptr[25];
	/*その他*/
	int i,pos,temp;
	/*ポインタを代入*/
	ptr[0]=&x1;ptr[1]=&x2;ptr[2]=&x3;ptr[3]=&x4;ptr[4]=&x5;
	ptr[5]=&x6;ptr[6]=&x7;ptr[7]=&x8;ptr[8]=&x9;ptr[9]=&x10;
	ptr[10]=&x11;ptr[11]=&x12;ptr[12]=&x13;ptr[13]=&x14;ptr[14]=&x15;
	ptr[15]=&x16;ptr[16]=&x17;ptr[17]=&x18;ptr[18]=&x19;ptr[19]=&x20;
	ptr[20]=&x21;ptr[21]=&x22;ptr[22]=&x23;ptr[23]=&x24;ptr[24]=&x25;
	/*整数を代入*/
	for(i=0;i<25;i++) {
		*ptr[i]=i+1;
	}
	/*乱数を初期化*/
	srand((unsigned int)time(NULL));
	/*シャッフル*/
	for(i=0;i<25;i++) {
		pos=rand()%(25-i)+i;
		temp=*ptr[i];
		*ptr[i]=*ptr[pos];
		*ptr[pos]=temp;
	}
	/*表示*/
	printf("%3d%3d%3d%3d%3d\n",x1,x2,x3,x4,x5);
	printf("%3d%3d%3d%3d%3d\n",x6,x7,x8,x9,x10);
	printf("%3d%3d%3d%3d%3d\n",x11,x12,x13,x14,x15);
	printf("%3d%3d%3d%3d%3d\n",x16,x17,x18,x19,x20);
	printf("%3d%3d%3d%3d%3d\n",x21,x22,x23,x24,x25);
	/*正常終了*/
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

初級者
記事: 200
登録日時: 9年前

Re: 数字をシャッフルする

#4

投稿記事 by 初級者 » 8年前

コード:

#include <stdio.h>
#include <stdlib.h>

#define SIZE  (25)  // 配列の大きさ
#define TIMES (50)  // シャッフルする回数(適当に決めてください)

void init(int *x, int n)
{
    int i;

    for (i = 0; i < n; i++) {
        x[i] = i + 1;
    }
}

void shuffle(int *x)
{
    int m, n, t, i;

    for (i = 0; i < TIMES; i++) {
        m = rand() % SIZE, n = rand() % SIZE;
        t = x[m], x[m] = x[n], x[n] = t;
    }
}

void print(int *x, int n)
{
    int i;

    for (i = 0; i < n; i++) {
        printf("%d ", x[i]);
    }
    putchar('\n');
}

int main(void)
{
    int x[SIZE];

    srand((unsigned int) time(NULL));
    init(x, SIZE);
    printf("シャッフル前\n");
    print(x, SIZE);
    shuffle(x);
    printf("シャッフル後\n");
    print(x, SIZE);
    return 0;
}

hss12
記事: 40
登録日時: 8年前

Re: 数字をシャッフルする

#5

投稿記事 by hss12 » 8年前

ぱにしんさんのやり方に近いですが
シャッフルではなく重複チェック用配列を使っています。
初心者なので配列を知らないのだろうと仮定して配列で回答します。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void){
	int x[25]; /* x[0]~x[24]の配列*/
	int c[25]={0}; /*重複チェック用配列 すべて0*/
	int i;

	/*乱数の初期化*/
	srand((unsigned)time(NULL));

	/*0~24の乱数を作り配列の先頭から順番に配列の最後まで格納*/
	for(i=0; i<25; i++){
		do{
			x[i] = rand() % 25;
		}while(c[x[i]]); /*重複していた場合はやり直し*/
		c[x[i]] = 1; /*既に配列に格納されているものと同じ値の数字をチェック*/
		x[i]++; /*0~24の数字が入るため1~25にする*/
	}

	/*表示*/
	for(i=0; i<25; i++){
		printf("x[%d]=%d\n", i, x[i]);
	}

	return 0;
}

アバター
みけCAT
記事: 6243
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 数字をシャッフルする

#6

投稿記事 by みけCAT » 8年前

初級者さんのやり方だと、同じ場所を何度も入れ替える可能性があり、無駄が出ます。
hss12さんのやり方だと、最悪いつまでたっても処理が終わりません。

という訳で、自分の、配列の先頭から順番に、
その位置もしくはその位置より後ろのいずれかの要素と入れ替えていく方法をおすすめします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

初級者
記事: 200
登録日時: 9年前

Re: 数字をシャッフルする

#7

投稿記事 by 初級者 » 8年前

効率が悪いコードを書いてしまって、すみませんでした。
名前のとおり初級者ですので、かんべんしてください。

まあ、みけCATさんが書かれるエレガントなコードと、
私のエレファントなコードとで、たかだか数十回ていど
の入れ替えでどれだけ効率に差がでるのかは
よくわかりませんけど。

hss12
記事: 40
登録日時: 8年前

Re: 数字をシャッフルする

#8

投稿記事 by hss12 » 8年前

25程度なら大丈夫だと思いますが、確かに無限ループする可能性もあります。
ところでDXライブラリとのことだったのでみけCATさんのやり方で書いてみました。
配列あり、ポインタなし。

コード:

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	ChangeWindowMode(TRUE), DxLib_Init(); //ウィンドウモード変更,初期化

	int x[25];
	int i, pos, temp;

	//整数を代入
	for(i=0; i<25; i++){
		x[i] = i+1;
	}

	//シャッフル
	for(i=0; i<25; i++){
		pos = GetRand(24-i) + i;
		temp = x[i];
		x[i] = x[pos];
		x[pos] = temp;
	}

	//表示
	for(i=0; i<25; i++){
		printfDx("x[%d]=%d\n", i, x[i]);
	}

	ScreenFlip(); // 出力した文字列を表示
	WaitKey(); // キーが押されるまで待つ
	DxLib_End(); //終了処理
	return 0;
}

アバター
みけCAT
記事: 6243
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 数字をシャッフルする

#9

投稿記事 by みけCAT » 8年前

初級者 さんが書きました:効率が悪いコードを書いてしまって、すみませんでした。
名前のとおり初級者ですので、かんべんしてください。
こちらこそきつい言い方をしてすみません。
初級者 さんが書きました:まあ、みけCATさんが書かれるエレガントなコードと、
私のエレファントなコードとで、たかだか数十回ていど
の入れ替えでどれだけ効率に差がでるのかは
よくわかりませんけど。
私としては、効率よりシャッフルでどれだけきちんと混ざってくれるかの方が心配でした。
と言っても使う乱数の性能にもよると思いますが。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

初級者
記事: 200
登録日時: 9年前

Re: 数字をシャッフルする

#10

投稿記事 by 初級者 » 8年前

きちんと混ざる、とは、どういう状態を指すのでしょうか。

私のコードにある50という回数が適切かどうかはわかりませんが、
とにかく何回か混ぜた結果、極端な結果として「たまたま」最初と同じ状態に
なったとしても、それはそれでシャッフルした結果の一つにすぎない、
と考える方がよいのではないかと思います。

「すべてのカードが最初の場所と異なる」ことが「きちんと混ざる」と
イコールとは限らない、と思っています。

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

Re: 数字をシャッフルする

#11

投稿記事 by beatle » 8年前

トランプのシャッフルの仕方は何種類かありますが,それぞれのシャッフル方法を再現する関数を作ったら面白そうですね.Hindu(),Riffle()などなど.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 数字をシャッフルする

#12

投稿記事 by softya(ソフト屋) » 8年前

為にし比べてみたらどうでしょうか?
比較は簡単だと思いますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

hss12
記事: 40
登録日時: 8年前

Re: 数字をシャッフルする

#13

投稿記事 by hss12 » 8年前

初級者 さんが書きました:きちんと混ざる、とは、どういう状態を指すのでしょうか。
50回もやれば十分な気もしますが
1,2,3...
と初期値が決まっているので、例えば
x[0]は1である確率が高くなってしまうのでは?
なるべく均等な確率になるシャッフルが良いのでは。

ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: 数字をシャッフルする

#14

投稿記事 by ISLe » 8年前

質問はVC++2008とDXライブラリということなので余談ですが。

EZアプリ(BREW)で、重複してたらやり直すアルゴリズムでウォッチドッグに引っ掛かって端末がリセットされることがありました。
iアプリ版がそういうアルゴリズムで書かれてて移植した際に判明したことですけど。
敵隊列の中から生き残っている三体を選ぶという処理です。

個人的にはたかがプログラムできちんと混ざることを期待しないですが、重複したらやり直しとか、交換しない可能性(※)があるとかの無駄はとても気になります。
※交換して元に戻るのではなくて同じインデックス同士の可能性です。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 数字をシャッフルする

#15

投稿記事 by softya(ソフト屋) » 8年前

表示するプログラムを作って見ました。
評価は難しかったので見た目で判断して下さい。
青いほど元の位置から離れていて赤は元の位置から変わっていない場合です。バーの長さが数値を表します。
SPACEで初期化しなおして再シャッフルします。

コード:

#include "DxLib.h"
#include <time.h>
#define SIZE  (25)  // 配列の大きさ

int Key[256]; // キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey(){
	char tmpKey[256]; // 現在のキーの入力状態を格納する
	GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
	for( int i=0; i<256; i++ ){ 
		if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
			Key[i]++;     // 加算
		} else {              // 押されていなければ
			Key[i] = 0;   // 0にする
		}
	}
	return 0;
}

//	みけCATさん手法
int ShuffleMikeCat(int XShuffle[])
{
	int pos,temp;
	int count = 0;
	
	for(int i=0;i<SIZE;i++) {
		pos=rand()%(SIZE-i)+i;
		temp=XShuffle[i];
		XShuffle[i]=XShuffle[pos];
		XShuffle[pos]=temp;
		count++;
    }
    
    return count;
}

//	初級者さん手法
#define TIMES (50)  // シャッフルする回数(適当に決めてください)
int ShuffleSyokyuu(int XShuffle[])
{
    int m, n, t, i;
	int count = 0;
 
    for (i = 0; i < TIMES; i++) {
        m = rand() % SIZE, n = rand() % SIZE;
        t = XShuffle[m], XShuffle[m] = XShuffle[n], XShuffle[n] = t;
		count++;
    }
    
    return count;
}

//	hss12さん手法
int Shufflehss12(int XShuffle[])
{
	int c[SIZE]={0}; /*重複チェック用配列 すべて0*/
	int count = 0;
	
	for(int i=0; i<SIZE; i++){
        do{
            XShuffle[i] = rand() % SIZE;
			count++;
        }while(c[XShuffle[i]]); /*重複していた場合はやり直し*/
        c[XShuffle[i]] = 1; /*既に配列に格納されているものと同じ値の数字をチェック*/
        XShuffle[i]++; /*0~24の数字が入るため1~25にする*/
    }
    
    return count;
}

void Shuffles( int loops[], int XShuffle[][SIZE])
{
	//	初期化
	for( int i=0 ; i<SIZE ; i++ ) {
		for( int p=0 ; p<3 ; p++ ) {
			XShuffle[p][i] = i+1;
		}
	}

	//	それぞれのシャッフル
	loops[0] = ShuffleMikeCat(XShuffle[0]);
	loops[1] = ShuffleSyokyuu(XShuffle[1]);
	loops[2] = Shufflehss12(XShuffle[2]);
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

    srand((unsigned int) time(NULL));

	int XShuffle[3][SIZE];
	int loops[3];

	//	シャッフル
	Shuffles(loops,XShuffle);

	// while( 裏画面を表画面に反映, メッセージ処理, 画面クリア )
	while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0  && gpUpdateKey()==0 ){
		
		if( Key[ KEY_INPUT_SPACE ] == 1 ){ // リターンキーが押されたら
			//	シャッフル
			Shuffles(loops,XShuffle);
		}
		
		DrawFormatString( 20,0, GetColor(0,255,255), "みけCATさん" );
		DrawFormatString( 220,0, GetColor(0,255,255), "初級者さん" );
		DrawFormatString( 420,0, GetColor(0,255,255), "hss12さん" );
		
		for( int i=0 ; i<SIZE ; i++ ) {
			int y = i * 16 + 40;
			DrawFormatString( 0, y-4, GetColor(255,255,255), "%2d", i+1 );
			for( int p=0 ; p<3 ; p++ ) {
				int x = p * 200 + 20;
				int w = XShuffle[p][i] * 5;
				int h = 8;
				
				//	元と同じ場合は赤離れるほど青
				int distance = abs( XShuffle[p][i]-(i+1) );
				int RG = 255 / (distance+1);
				int color = GetColor(RG,0,255-RG);
				
				DrawBox( x,y, x+w,y+h, color, TRUE);
			}
		}
		for( int p=0 ; p<3 ; p++ ) {
			DrawFormatString( 20+p*200,460, GetColor(0,255,255), "回数=%d", loops[p] );
		}
	}

	DxLib_End(); // DXライブラリ終了処理
	return 0;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 数字をシャッフルする

#16

投稿記事 by softya(ソフト屋) » 8年前

ちなみに、初級者さんとhss12さんのは恐ろしくシャッフルされない場合があります。あと予想通りhss12さんのはループ回数が多いです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

初級者
記事: 200
登録日時: 9年前

Re: 数字をシャッフルする

#17

投稿記事 by 初級者 » 8年前

hss12 さんが書きました: 1,2,3...
と初期値が決まっているので、例えば
x[0]は1である確率が高くなってしまうのでは?
それを言ってしまうと、
例えばx[1]は2である確率が高くなってしまうのでは?
例えばx[2]は3である確率が高くなってしまうのでは?
...
例えばx[24]は25である確率が高くなってしまうのでは?
という話になって、全く論理的ではなくなってしまいます。

私のコードにおける50という回数は、
10回程度だったら少なすぎる、まあ、配列要素数の2倍程度でよかろう、
というきわめてアバウトな考えに基づいているだけで、
何の理論的裏付けもありませんが…。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 数字をシャッフルする

#18

投稿記事 by softya(ソフト屋) » 8年前

調子に乗って、100要素バージョン。

コード:

#include "DxLib.h"
#include <time.h>
#define SIZE  (100)  // 配列の大きさ

int Key[256]; // キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey(){
	char tmpKey[256]; // 現在のキーの入力状態を格納する
	GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
	for( int i=0; i<256; i++ ){ 
		if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
			Key[i]++;     // 加算
		} else {              // 押されていなければ
			Key[i] = 0;   // 0にする
		}
	}
	return 0;
}

//	みけCATさん手法
int ShuffleMikeCat(int XShuffle[])
{
	int pos,temp;
	int count = 0;
	
	for(int i=0;i<SIZE;i++) {
		pos=rand()%(SIZE-i)+i;
		temp=XShuffle[i];
		XShuffle[i]=XShuffle[pos];
		XShuffle[pos]=temp;
		count++;
    }
    
    return count;
}

//	初級者さん手法
#define TIMES (SIZE*2)  // シャッフルする回数(適当に決めてください)
int ShuffleSyokyuu(int XShuffle[])
{
    int m, n, t, i;
	int count = 0;
 
    for (i = 0; i < TIMES; i++) {
        m = rand() % SIZE, n = rand() % SIZE;
        t = XShuffle[m], XShuffle[m] = XShuffle[n], XShuffle[n] = t;
		count++;
    }
    
    return count;
}

//	hss12さん手法
int Shufflehss12(int XShuffle[])
{
	int c[SIZE]={0}; /*重複チェック用配列 すべて0*/
	int count = 0;
	
	for(int i=0; i<SIZE; i++){
        do{
            XShuffle[i] = rand() % SIZE;
			count++;
        }while(c[XShuffle[i]]); /*重複していた場合はやり直し*/
        c[XShuffle[i]] = 1; /*既に配列に格納されているものと同じ値の数字をチェック*/
        XShuffle[i]++; /*0~24の数字が入るため1~25にする*/
    }
    
    return count;
}

void Shuffles( int loops[], int XShuffle[][SIZE])
{
	//	初期化
	for( int i=0 ; i<SIZE ; i++ ) {
		for( int p=0 ; p<3 ; p++ ) {
			XShuffle[p][i] = i+1;
		}
	}

	//	それぞれのシャッフル
	loops[0] = ShuffleMikeCat(XShuffle[0]);
	loops[1] = ShuffleSyokyuu(XShuffle[1]);
	loops[2] = Shufflehss12(XShuffle[2]);
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

    srand((unsigned int) time(NULL));

	int XShuffle[3][SIZE];
	int loops[3];

	//	シャッフル
	Shuffles(loops,XShuffle);

	// while( 裏画面を表画面に反映, メッセージ処理, 画面クリア )
	while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0  && gpUpdateKey()==0 ){
		
		if( Key[ KEY_INPUT_SPACE ] == 1 ){ // リターンキーが押されたら
			//	シャッフル
			Shuffles(loops,XShuffle);
		}
		
		DrawFormatString( 20,0, GetColor(0,255,255), "みけCATさん" );
		DrawFormatString( 220,0, GetColor(0,255,255), "初級者さん" );
		DrawFormatString( 420,0, GetColor(0,255,255), "hss12さん" );
		
		for( int i=0 ; i<SIZE ; i++ ) {
			int h = 350/SIZE;
			int y = i * (h+1) + 40;
			DrawFormatString( 0, y-4, GetColor(255,255,255), "%2d", i+1 );
			for( int p=0 ; p<3 ; p++ ) {
				int x = p * 200 + 20;
				int w = XShuffle[p][i] * 200/SIZE;
				
				//	元と同じ場合は赤離れるほど青
				int distance = abs( XShuffle[p][i]-(i+1) );
				int RG = 255 / (distance+1);
				int color = GetColor(RG,0,255-RG);
				
				DrawBox( x,y, x+w,y+h, color, TRUE);
			}
		}
		for( int p=0 ; p<3 ; p++ ) {
			DrawFormatString( 20+p*200,460, GetColor(0,255,255), "回数=%d", loops[p] );
		}
	}

	DxLib_End(); // DXライブラリ終了処理
	return 0;
}
回数あたりの効率はみけCATさんが、やはり一番高いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

hss12
記事: 40
登録日時: 8年前

Re: 数字をシャッフルする

#19

投稿記事 by hss12 » 8年前

softya(ソフト屋) さんが書きました:ちなみに、初級者さんとhss12さんのは恐ろしくシャッフルされない場合があります。あと予想通りhss12さんのはループ回数が多いです。
私の場合シャッフルしているのではなく毎回ランダム関数に代入させているので
シャッフルされないことはないと思いますが。そもそも初期値がありませんし。
もちろんループ数は多いでしょうけど。

100要素の場合だとループ回数が
みけCATさん 100回
初級者さん 200回
私 数百回
となりますが、初級者さんのシャッフル数を100にすると
シャッフルされていない赤が目立ちますね。
これが
例えばx[1]は2である確率が高くなってしまうのでは?
例えばx[2]は3である確率が高くなってしまうのでは?
...
例えばx[24]は25である確率が高くなってしまうのでは?
という話だと思います。
2倍やれば見た感じ大丈夫そうですが。

MASSA

Re: 数字をシャッフルする

#20

投稿記事 by MASSA » 8年前

質問した本人である私の返信が遅れてしまってもうしわけありません(汗
回答してくださった皆様、ありがとうございます。

みけCAT様、初級者様、hss12様。コードをありがとうございました。
それぞれのコードを読んでいて、とても勉強になりました。

また、softya(ソフト屋)様、それぞれの方法を比較できるプログラムをありがとうございました。
まだ、始めたばかりの私にとっては、とても感動できるものでした。

とりあえず、みけCAT様の方法が効率的みたいですので、そちらを採用させていただきたいと思います。
ポインタはほとんど使ったことがなくて、少々不安なところもありますが、頑張って勉強してマスターしたいと思います。

一応、これで解決とさせていただきたいと思いますm(_ _)m

MASSA

Re: 数字をシャッフルする

#21

投稿記事 by MASSA » 8年前

すみません!

「解決」にチェックを入れ忘れていました…

閉鎖

“C言語何でも質問掲示板” へ戻る