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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
misodo

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

#1

投稿記事 by misodo » 16年前

初歩的な質問ですみません。

<問題>

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

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

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

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

sizuma

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

#2

投稿記事 by sizuma » 16年前

どのようなアルゴリズムを使っているのかわからないので、的確なアドバイスが出来ませんが。
僕がぱっと思いついたのを書くなら剰余算を使って、

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

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

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

misodo

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

#3

投稿記事 by misodo » 16年前

ありがとうございます。

自分が書いたものです。

#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両方の倍数の部分以外はちゃんと表示されます。

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

sizuma

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

#4

投稿記事 by sizuma » 16年前

ソースコードはpreタグで囲ってくださいね。上に規約がありますhttp://dixq.net/board/board.html

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

100までの数

  ↓ 3の倍数を抜く

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

  ↓ 5の倍数を抜く

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

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


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

box

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

#5

投稿記事 by box » 16年前

> 自分が書いたものです。

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

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

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

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

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

Hermit

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

#6

投稿記事 by Hermit » 16年前

もう答えが書かれていたので削除(^^;

misodo

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

#7

投稿記事 by misodo » 16年前

たくさんのお答えありがとうございます。

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

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

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

閉鎖

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