重複しないrand関数

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

重複しないrand関数

#1

投稿記事 by ぺこ » 7年前

初投稿です。
ネットで重複しないrand関数のソースコードを見つけ、for文を(i=0;i<5)でなく(i=1;i<=5)で回したいのですがうまくいきません。自分で手直ししたところxの値がでたらめになってしまいます。ご指摘お願いします。
code
int main(void){
int i,j;
int x[5];
int y[5];
srand(time(NULL));
for(i=0;i<5;i++){
y=i;
printf("y[%d]=%d \n", i, y);
}

for(i=0;i<5;i++){
x=y[rand()%(5-i)];
printf("-------x[%d]=%d\n",i, x);
for(j=0;j<4;j++){
if(y[j]>=x){
y[j]=y[j+1];
}
}
for(j=0;j<4-i;j++){
printf("y[%d]=%d \n", j, y[j]);
}
//printf("[%d]\n",x);
}
return 0;
}
/code

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

Re: 重複しないrand関数

#2

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

ぺこ さんが書きました:for文を(i=0;i<5)でなく(i=1;i<=5)で回したいのですがうまくいきません。自分で手直ししたところxの値がでたらめになってしまいます。ご指摘お願いします。

提示されたソースコードには、(i=1;i<=5)に近い部分が見当たりません、
まずは「xの値がでたらめになってしまう」ソースコードを提示してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ぺこ

Re: 重複しないrand関数

#3

投稿記事 by ぺこ » 7年前

以下のソースコードは自分が書き換えたものです。xの値がでたらめになるだけでなく、値を重複してしまう時もあります。

code
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(void){
int i,j;
int x[5];
int y[5];
srand(time(NULL));
for(i=1;i<=5;i++){
y=i;
printf("y[%d]=%d \n", i, y);
}

for(i=1;i<=5;i++){
x=y[rand()%(6-i)];
printf("-------x[%d]=%d\n",i, x);
for(j=0;j<5;j++){
if(y[j]>=x){
y[j]=y[j+1];
}
}
}
return 0;
}
/code

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

Re: 重複しないrand関数

#4

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

int x[5];やint y[5];として宣言された配列の添字の有効範囲は0以上4以下です。
操作する添字の範囲を意識してプログラムを書きましょう。

コード:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(void){
	int i,j;
	int x[5];
	int y[5];
	srand(time(NULL));
	for(i=1;i<=5;i++){
//		y[i]=i;
		y[i-1]=i;
//		printf("y[%d]=%d \n", i, y[i]);
		printf("y[%d]=%d \n", i, y[i-1]);
	}

	for(i=1;i<=5;i++){
//		x[i]=y[rand()%(6-i)];
		x[i-1]=y[rand()%(6-i)];
//		printf("-------x[%d]=%d\n",i, x[i]);
		printf("-------x[%d]=%d\n",i, x[i-1]);
//		for(j=0;j<5;j++){
		for(j=0;j<4;j++){
//			if(y[j]>=x[i]){
			if(y[j]>=x[i-1]){
				y[j]=y[j+1];
			}
		}
	}
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ぺこ

Re: 重複しないrand関数

#5

投稿記事 by ぺこ » 7年前

思った通りに動きました。思い通りに動かなかった原因もわかりました。有難うごさいます。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: 重複しないrand関数

#6

投稿記事 by Dixq (管理人) » 7年前

見てお分かりと思いますがタグの使い方が間違っています。
codeタグは[と]で囲んでください。

返信

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