• ベストアンサー

rand関数について

rand関数で取得した乱数を入力し、入力した逆の順番に表示しなさい、という問題があるのですが。一度乱数のプログラムを作り、その後逆に表示するプログラムというのは分かるのですが、そのあとがどうしても分かリません。 一般に、この場合は先ず。 #include <stdio.h> #include <stdlib.h> int main(void) { int i; for(i=1;i<==10;i++){ printf("%d",rand()%10+1); { return 0; } の表示をして、新たに逆にする表示をすると思うのですが、どのパターンを使うのが無難なのでしょうか? できれば 式を含めてお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • weiss09
  • ベストアンサー率45% (20/44)
回答No.1

配列作って、その中に保持しておけば大丈夫です。 int main(void) { int i; int v[10]; // 値を保存するための配列 for(i=0;i<=9;i++){  v[i]=rand()%10+1; } for(i=9;i>=0;i--){  printf("%d\n",v[i]); } return 0; } テストしてないので見落としなどあるかもしれませんがご容赦を。

sheran
質問者

補足

詳しい説明ありがとうございます。 何とか実行できました。 それでですが、この問題の場合求める擬似乱数の逆に表示したい場合、 最初に求める乱数が137866975と表示されるのですが逆は579668731とひょうじする方法でなくてもよくて、 5 7 9 6 6 8 7 1 3 という表示が正という考えでも良いということなのでしょうか? よろしくお願いします。

その他の回答 (5)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

#3>外部シンボル'_printf_rand'が未解決。error1、と表示されるのですがこの場合の原因はどこにあるのでしょうか? すでに#4で回答されていますが、 printf_rand って関数が使われているけど、ソースの中で、定義もされてなきゃ、リンクもされていないよぉ ってことです。 #3のプログラムでは、printf_rand という関数は使っていないので、 おそらく、関数の名前を変更されたのだと思いますが、定義の方も変更して(printf_rand か print_rand に)統一する必要があります。 あと、#5と同じ理由で改行するようにしてあります。

sheran
質問者

お礼

回答ありがとうございました。 何とか解決できました。 返答遅くなり申し訳ありませんでした。 ありがとうございました。

  • weiss09
  • ベストアンサー率45% (20/44)
回答No.5

No1です。 printf("%d\n",v[i]); \nが改行コードですので、この場合は出力1回ごとに改行されるようにしてます。 rand()%10+1だと1~10までの値を取るので、改行しないとごちゃごちゃになるかなと思い、付け加えたものです。 (注記した方が良かったですね(^_^;) 要は逆順で表示すれば良いので、改行してもしなくてもいいと思いますよ。 ただ、数値と数値の区切りは明確にした方が良いと思います。 このあたりは「どういう目的で組むのか」ということで。

sheran
質問者

お礼

回答ありがとうございました。 あれから、無事解決できました。 ありがとうございました。

回答No.4

> 外部シンボル'_printf_rand'が未解決。error1、と表示されるのですがこの場合の原因はどこにあるのでしょうか? × printf_rand ○ print_rand

sheran
質問者

お礼

ご指摘ありがとうございました。 何とか解決できました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#include <stdio.h> #include <stdlib.h> void print_rand(int n){ int r; if(n==0){ printf("\n"); return ; } r=rand()%10+1; printf("%d\n",r); print_rand(n-1); printf("%d\n",r); } int main(void){ print_rand(10); return 0; }

sheran
質問者

補足

詳しい回答ありがとうございます。 実際上に説明してくださった通りにやって見たのですが、外部シンボル'_printf_rand'が未解決。error1、と表示されるのですがこの場合の原因はどこにあるのでしょうか? もし宜しかったらお願いします。

回答No.2

まず、いったん何らかのデータ構造に入れましょう。 最大数がわかっているなら配列がいいですかね。 int data[1000]; int save_num = 255; int i; for(i = 0; i < save_num; i++){ data[i] = rand(); } // 配列データに乱数がsave_num個入力される。 // 保存した配列を後ろから前に出力していく。 for(i = 255; i != -1; i--){ printf("%d,",data[i]); } こんな感じでいいでしょう。 おもしろい実装としては、再帰呼び出しで void Print(int data[],int n){ if(n == 0) printf("%d,",data[0]); else{ Print(data,n-1); printf("%d,",data[n]); } } こんな感じですかね。

sheran
質問者

お礼

返事が遅くなってしまいまして申し訳ありません。 早速実行してみます。 詳しい説明をありがとうございます。

sheran
質問者

補足

実行し無事実行できました。 今まで思いつかなかったので、非常に役に立ちました。 また、質問する事があればよろしくお願いします。 ありがとうございました。

関連するQ&A