アプリ版:「スタンプのみでお礼する」機能のリリースについて

c言語のプログラムで、1と-1をランダムにn個出力するプログラムを書きたいと思っています。どのようにすればいいでしょうか。

A 回答 (6件)

標準関数のsrandとrandを使えば擬似乱数を得られます。


randは0からRAND_MAXまでの数を生成しますので、必要な範囲に縮めてあげましょう。(%を使う方法は乱数が偏ります)
1と-1でしたら、こんな方法でも計算できますね。
#include <stdio.h>
/* 1か-1をN個表示する */
#include <stdlib.h>
#include <time.h>
#define nrand(n) (int)((double)n*rand()/RAND_MAX) /* 0以上n未満の整数を返す */
#define N 100

int main(void) {
 int i;
 srand((unsigned int) time(NULL)); /* 乱数の種 */
 for (i=0; i<N; i++) {
  printf("%d ",nrand(2)*2-1); /* 0~1の乱数を2倍して1引くと-1か1ができる */
 }
 return 0;
}
    • good
    • 1

JIS (番号忘却)乱数表



解説の所にC言語による擬似乱数の作り方が書いてあります。
    • good
    • 0

訂正。

。0以上n未満の整数を返すマクロで、nが出る可能性があります
#define nrand(n) (int)((double)n*rand()/(RAND_MAX+1.0))
    • good
    • 0

おはようございます.


標準ライブラリに入っているrand()という関数を使うことで,整数値の乱数を得ることができます.
ただし,この関数は専門的には擬似乱数と呼ばれるもので,
「決まった方法である値から次の値を作る」ものです.
したがって,初期値を決めないことには延々同じ系列が出力されてしまいます.
初期値の設定はsrand()という関数を使えばできます.
以上でランダムな整数値を得ることができますので,後は,
整数値を何らかの方法で(1,-1)に変換してやれば良いということになります.
これは整数値の最上位ビットが0だったら1,
そうでなければ-1などとすれば良いでしょう(ビット演算を使ってください).
最下位ビットを使わないのは処理系によってはrand()関数の実装に問題があり,
0と1が交互に出現する恐れがあるためです
(専門的には線型合同法とよばれる手法を採用しているとこうなる恐れがあります).

ただし,もしもあなたが統計などの目的で数万件以上の乱数を必要としているならば,
ここで紹介した方法を使ってはいけません.
擬似乱数という用語で書籍などを調べて,きちんとした一様乱数源を利用してください(メルセンヌ・ツイスタ等).

参考URL:http://ja.wikipedia.org/wiki/Rand
    • good
    • 0

#include <stdio.h>


#include <stdlib.h>

#define MAX_LOOP 10 /* 最大表示回数 */

int main(void)
{
  int i, n;

  n = 1 + (rand() % 100);

  for(i=0; i<n; i++)
  {
    if(rand() & 1)
    {
      printf(" 1\n");
    }
    else
    {
      printf("-1\n");
    }
  }
  return 0;
}
    • good
    • 0

> 1と-1をランダムにn個



0, 1のいずれかを1個出力することはできますか?
0のときは強制的に-1にしてやれば、
-1, 1のいずれかを1個出力できますね。
それをn回繰り返せばよいです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!