乱数で負の数を取る場合と倍数を調べる場合

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
補給タンク
記事: 10
登録日時: 3年前

乱数で負の数を取る場合と倍数を調べる場合

#1

投稿記事 by 補給タンク » 3年前

某サイトにてC言語を勉強しているのですが、以下の問題がどうしてもわかりません。
どなたかアドバイス頂けませんでしょうか?

サイトURL : http://c-lang.sevendays-study.com/problem2.html

>問題:prob3-12.(難易度:★)

> -10から10までの乱数を発生させて表示し、”負の値です”と表示し、
> 正の値であれば、”正の値です”と表示し、そうでなければ、”0です”と表示するプログラムを作りなさい。

 1か0かから始まる範囲の乱数なら分かるのですが、
 これが負の数となるとどう書いていいのかがどうしてもわかりません………。

>問題:prob3-16.(難易度:★★)

> 1から100までの数値を乱数で発生させて表示し、以下の処理をしなさい。

> ①2の倍数であるなら、”2の倍数です。”と表示
> ②3の倍数であるなら、”3の倍数です。”と表示
> ③ただし、2の倍数でもあり、3の倍数でもある場合は、”2と3の公倍数です。”と表示。

 1から100までの数値を乱数で出すには、
 int a;
 srand((unsigned)time(NULL));
 a = rand() % 100 + 1;
 で大丈夫だと思うのですが、肝心の倍数を求める書き方がわかりません。(文字を表示させるのはわかります)
 おそらくifを使うと思うのですが、サイト中調べ回してもよく分からなくて…。

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

Re: 乱数で負の数を取る場合と倍数を調べる場合

#2

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

補給タンク さんが書きました: 1か0かから始まる範囲の乱数なら分かるのですが、
 これが負の数となるとどう書いていいのかがどうしてもわかりません………。
乱数の範囲の最小値が0になるようにシフト(足し算)した範囲の乱数を発生させ、そのシフトを元に戻す(引き算)ことで求めることができます。
補給タンク さんが書きました:肝心の倍数を求める書き方がわかりません。(文字を表示させるのはわかります)
「nの倍数である」とは、「nで割った余りが0である」という意味です。
xをyで割った余りは、x % yで求められます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

補給タンク
記事: 10
登録日時: 3年前

Re: 乱数で負の数を取る場合と倍数を調べる場合

#3

投稿記事 by 補給タンク » 3年前

素早い回答有難う御座います。
ただ、難点がまだ…
みけCAT さんが書きました:
補給タンク さんが書きました: 1か0かから始まる範囲の乱数なら分かるのですが、
 これが負の数となるとどう書いていいのかがどうしてもわかりません………。
乱数の範囲の最小値が0になるようにシフト(足し算)した範囲の乱数を発生させ、そのシフトを元に戻す(引き算)ことで求めることができます。
 下の問題は出来たのですが、これだけがどうしてもわかりません。
 具体的にどうコードを書けばいいのか検討もつかなくて…。

>「nの倍数である」とは、「nで割った余りが0である」という意味です。
>xをyで割った余りは、x % yで求められます。

 コチラはわかりました。ありがとうございます!!
 以下の通りに打ってみたところ、なんとかそれらしき形にできたと思います。

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

int main(void){
int a;
srand((unsigned)time(NULL));
a = rand() % 100 + 1;
printf("数:%d ¥n",a);
if(a%6==0){
printf("2と3の公倍数です。\n");
}else if(a%3==0){
printf("3の倍数じゃゴルァ!!\n");
}else if(a%2==0){
printf("2の倍数です\n");
}else{
printf("");
}
}

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: 乱数で負の数を取る場合と倍数を調べる場合

#4

投稿記事 by YuO » 3年前

補給タンク さんが書きました:
みけCAT さんが書きました:
補給タンク さんが書きました: 1か0かから始まる範囲の乱数なら分かるのですが、
 これが負の数となるとどう書いていいのかがどうしてもわかりません………。
乱数の範囲の最小値が0になるようにシフト(足し算)した範囲の乱数を発生させ、そのシフトを元に戻す(引き算)ことで求めることができます。
 下の問題は出来たのですが、これだけがどうしてもわかりません。
基本的な部分は,理解していますか。
つまり,範囲[-10, 10]の乱数を発生させる事と,範囲[0, 20]の乱数を発生させることは同じことである,ということです。

後者の乱数を作る (コードを書く) 事はできるんですよね。
そこから前者を作り出すには,すぐにわかると思いますが,10を引けばできます。
あとは,それをコードに落とし込むだけです。

補給タンク
記事: 10
登録日時: 3年前

Re: 乱数で負の数を取る場合と倍数を調べる場合

#5

投稿記事 by 補給タンク » 3年前

 夜遅くまでお疲れ様です。

>基本的な部分は,理解していますか。
>つまり,範囲[-10, 10]の乱数を発生させる事と,範囲[0, 20]の乱数を発生させることは同じことである,ということです。

>後者の乱数を作る (コードを書く) 事はできるんですよね。
>そこから前者を作り出すには,すぐにわかると思いますが,10を引けばできます。
>あとは,それをコードに落とし込むだけです。

 もしかしたらできたかもしれません…。
 ありがとうございます!!

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

int main(void){
int a;
srand((unsigned)time(NULL));
a = rand() % (20+1)-10;
printf("数:%d ¥n",a);
if(a>0){
printf("正の数です。\n");
}else if(a<0){
printf("負の数です。\n");
}else{
printf("0です。\n");
}
}

 

返信

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