プログラミングの問題

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

プログラミングの問題

#1

投稿記事 by yoyo » 12年前

C++言語を学んでいるものですがどうしてもこの問題が解けません。
手も足もだせない状態なのでよろしくお願いします。
問題は以下の通りです。

床の上の(0,0)地点にサイコロが置いてあります.
サイコロの対面(互いに平行な面)の目の和は7です.
初期値は,上面が1,北面が2,西面が3です.
(すなわち,床面が6,南面が5,東面が4)

原点から東に1回転がした(1,0)地点では上面は3です.
原点から西に2回転がした(-2,0)地点では上面は6です.
次の試行を,任意の回数,繰り返すプログラムを作成してください
(1)ユーザが,向き(東西南北)を指定する.
(2)ユーザが,回転数(整数)を指定する.
(3)指定した{方向,回転数}に従い,サイコロを転がす.
(4)転がした後の,上面の目の数を表示する.
以下,(1)から繰り返す。

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

Re: プログラミングの問題

#2

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

課題ならば、丸投げは禁止です。
どこの問題ですか?自作ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: プログラミングの問題

#3

投稿記事 by beatle » 12年前

サイコロの上面と北面(または南、東、西のいずれか)の二面の状態を決めると、サイコロの置き方を特定できます。
すなわち、サイコロの状態を二つの変数で管理すれば良いことになります。

後は、一回だけ回転させたときにその二つの変数がどのように変化するかをプログラムします。
例えば 上面1、北面2のとき、東に一回だけ転がすと 上面3、北面2 に変数が更新されます。
という風に、上面X、北面Y、回転方向Zに対応して新しい上面X'、北面Y'を計算するプログラムを書けばいいわけです。

愚直に書くと上面6通り、北面4通り、回転方向4通り=96通りの分岐を書かねばならないので(そんなにelse ifを書きたくないですよね!)、如何に減らせるかが工夫のしどころです。

みけCATさんも仰るように、丸投げは出来ませんので、あなたが書ける所までプログラムを書いて提示してください。
(HelloWorldプログラムは書けますか?while文で無限ループするプログラムは書けますか?ユーザーから入力を受け取るプログラムは書けますか?)

閉鎖

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