ページ 11

問題の一部がわかりません;

Posted: 2009年8月07日(金) 23:44
by misodo
初歩的な質問ですみません。

<問題>

1から100までの数値を画面に表示するプログラムを書け。
そのうち数値が3の倍数であった場合、「この数値は3の倍数です」5の倍数であった場合、「この数値は5の倍数です」と表示されるようにしろ。
また、数値が3と5両方の倍数であった場合、「この数値は3と5両方の倍数です」と表示されるようにしろ。

うろ覚えなので問題がわかりずらく申し訳ありません;

自分てやってみたところ、1から100まで数字を表示し、3と5の倍数の数字だけ表示を変えられたのですが、3と5両方の倍数の数字の表示を変えることができません;

どうしたらいいのでしょうか?

Re:問題の一部がわかりません;

Posted: 2009年8月07日(金) 23:51
by sizuma
どのようなアルゴリズムを使っているのかわからないので、的確なアドバイスが出来ませんが。
僕がぱっと思いついたのを書くなら剰余算を使って、

if(3で割って余りが0){
   if(5で割って余りが0){
      この数値は3と5両方の倍数です
   }else{
      この数値は3の倍数です
   }
}else if(5で割って余りが0){
   この数値は5の倍数です
}else{
   普通に表示
}

っていう処理にするかな。
なんか見づらいな。

追記
って思ったらミスってたんで一部訂正しました
全角でインデントしたんで、まだなんかミスってるかも・・・

Re:問題の一部がわかりません;

Posted: 2009年8月08日(土) 00:24
by misodo
ありがとうございます。

自分が書いたものです。

#include <stdio.h>

int main()
{
int i;

for(i=1; i<=100; i++){

if(i % 3 == 0){

printf("この数値3の倍数です\n");

}else if(i % 5 == 0){

printf("この数値は5の倍数です\n");

}else if(i % 3 == 0 && i % 5 == 0){

printf("この数値は3と5の倍数です\n");

}else{

printf("%d\n", i);

}

}

3と5両方の倍数の部分以外はちゃんと表示されます。

わかりづらくてすみません;

Re:問題の一部がわかりません;

Posted: 2009年8月08日(土) 00:33
by sizuma
ソースコードはpreタグで囲ってくださいね。上に規約がありますhttp://dixq.net/board/board.html

判定の順番を変えましょう

100までの数

  ↓ 3の倍数を抜く

100までの数(3の倍数なし)

  ↓ 5の倍数を抜く

100までの数(3の倍数と5の倍数がない。つまりこの時点で3の倍数かつ5の倍数は1つもない)

  ↓ 3の倍数かつ、5の倍数を抜く(どうせない)


というわけです。
最初に3の倍数かつ5の倍数か、の判定式を持ってきましょう

Re:問題の一部がわかりません;

Posted: 2009年8月08日(土) 00:37
by box
> 自分が書いたものです。

>1から100までの数値を画面に表示する

この仕様が抜けています。

> }else if(i % 3 == 0 && i % 5 == 0){

このif文に到達するのは、
iが3で割り切れず、かつ、5でも割り切れないときです。
したがって、このif文の条件を満たすことはありません。

sizumaさんのアドバイスにしたがって、
ソースを書き換えてみてはいかがでしょうか。

Re:問題の一部がわかりません;

Posted: 2009年8月08日(土) 00:39
by Hermit
もう答えが書かれていたので削除(^^;

Re:問題の一部がわかりません;

Posted: 2009年8月08日(土) 00:51
by misodo
たくさんのお答えありがとうございます。

規約はまったく読んでいませんでした;すみません;

よく考えて書き換えてみようと思います。

ありがとうございました!