某サイトにて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を使うと思うのですが、サイト中調べ回してもよく分からなくて…。
乱数で負の数を取る場合と倍数を調べる場合
Re: 乱数で負の数を取る場合と倍数を調べる場合
乱数の範囲の最小値が0になるようにシフト(足し算)した範囲の乱数を発生させ、そのシフトを元に戻す(引き算)ことで求めることができます。補給タンク さんが書きました: 1か0かから始まる範囲の乱数なら分かるのですが、
これが負の数となるとどう書いていいのかがどうしてもわかりません………。
「nの倍数である」とは、「nで割った余りが0である」という意味です。補給タンク さんが書きました:肝心の倍数を求める書き方がわかりません。(文字を表示させるのはわかります)
xをyで割った余りは、x % yで求められます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 乱数で負の数を取る場合と倍数を調べる場合
素早い回答有難う御座います。
ただ、難点がまだ…
具体的にどうコードを書けばいいのか検討もつかなくて…。
>「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("");
}
}
ただ、難点がまだ…
下の問題は出来たのですが、これだけがどうしてもわかりません。みけCAT さんが書きました:乱数の範囲の最小値が0になるようにシフト(足し算)した範囲の乱数を発生させ、そのシフトを元に戻す(引き算)ことで求めることができます。補給タンク さんが書きました: 1か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("");
}
}
Re: 乱数で負の数を取る場合と倍数を調べる場合
基本的な部分は,理解していますか。補給タンク さんが書きました:下の問題は出来たのですが、これだけがどうしてもわかりません。みけCAT さんが書きました:乱数の範囲の最小値が0になるようにシフト(足し算)した範囲の乱数を発生させ、そのシフトを元に戻す(引き算)ことで求めることができます。補給タンク さんが書きました: 1か0かから始まる範囲の乱数なら分かるのですが、
これが負の数となるとどう書いていいのかがどうしてもわかりません………。
つまり,範囲[-10, 10]の乱数を発生させる事と,範囲[0, 20]の乱数を発生させることは同じことである,ということです。
後者の乱数を作る (コードを書く) 事はできるんですよね。
そこから前者を作り出すには,すぐにわかると思いますが,10を引けばできます。
あとは,それをコードに落とし込むだけです。
Re: 乱数で負の数を取る場合と倍数を調べる場合
夜遅くまでお疲れ様です。
>基本的な部分は,理解していますか。
>つまり,範囲[-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");
}
}
>基本的な部分は,理解していますか。
>つまり,範囲[-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");
}
}