初投稿です。
ネットで重複しない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
重複しないrand関数
Re: 重複しないrand関数
ぺこ さんが書きました:for文を(i=0;i<5)でなく(i=1;i<=5)で回したいのですがうまくいきません。自分で手直ししたところxの値がでたらめになってしまいます。ご指摘お願いします。
提示されたソースコードには、(i=1;i<=5)に近い部分が見当たりません、
まずは「xの値がでたらめになってしまう」ソースコードを提示してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 重複しないrand関数
以下のソースコードは自分が書き換えたものです。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
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
Re: 重複しないrand関数
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で殴ればいい!(死亡フラグ)
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 重複しないrand関数
見てお分かりと思いますがタグの使い方が間違っています。
codeタグは[と]で囲んでください。
codeタグは[と]で囲んでください。