こんにちは。
自分はプログラミングを学ぶ社会人です。研修を受けておりまして、以下のような問題を出されたのですが、このような考えは正しいでしょうか?それとも手順を変えたほうがよろしいでしょうか?
<問題>
変数xには29、変数yには26が入っており、このx、yと、さらに空の変数a(20以上の数値は格納できない)の3つだけを使って、xとyの数値を入れ替える処理を行う流れ図を完成させよ。
開始
|
29÷10→a
|
26→x
|
10a→y
|
xとyを表示
|
終了
※「|」は、流れ図で下に向かう処理を表しています。
どうぞよろしくお願い致します。
No.8ベストアンサー
- 回答日時:
No.1です。
aが20までなんて言うのがあったのでdoubleと言う宣言は意味がないのかなぁと思って勝手に整数型を規定していました。こういうところも見るのかも知れませんね。
両方の変数のxorを取るなんて言うのもありますね。
いろいろ出して見るのもいいかもしれません。
参考URL:http://www.geocities.jp/ky_webid/algorithm/001.h …
またまたご回答ありがとうございますm(_ _)m。
>両方の変数のxorを取るなんて言うのもありますね。
この方法、新しいです!すごいですね。気が付きませんでした。
No.11
- 回答日時:
問題のように、変数aに格納できる上限値が19であると決められている場合
は、以下のようなアルゴリズムでも良いかもしれません。
a ← x - 19
x ← y
y ← a + 19
または、
a ← y - 19
y ← x
x ← a + 19
現実的にはあり得ない想定での問題なので、その程度のアルゴリズムで良いかと思います。研修の目的とは、困難な問題にぶち当たった時にあなたがどのように対処するかをこの問題を出題し考えさせる事によってどのような解を出すかを見たいという目的があるのではないでしょうか。
よって、制約された条件下での問題対処法を見出してもらいたいといった目的であると考えられ、一般的に通用するアルゴリズムの形式を求められているのではなく、この問題に対して、いかに対処すべくどのように解決すべきかを考える事を目的としており、その視点でアルゴリズムを作成すればよいのではないでしょうか。
あくまでも参考意見として…。
ご回答ありがとうございます。
>制約された条件下での問題対処法を見出してもらいたいといった目的であると考えられ、一般的に通用するアルゴリズムの形式を求められているのではなく、この問題に対して、いかに対処すべくどのように解決すべきかを考える事を目的としており、その視点でアルゴリズムを作成すればよいのではないでしょうか。
そうですね。ただ、講師陣はちょっと変わっていて、研修生のレベルを把握せずに問題を出している部分が多く、その概念を知っていないと解けないような問題も出してきます。要は、まだ研修体系が整っていないという感じです。もちろん自分も日々勉強してはいるのですが・・・。他のテストでも、「応用」というレベルではなく、教わっていないと解けないような問題を出され、解けないと不合格という感じでした。
No.10
- 回答日時:
aを使えってことなら、真っ先に思いつくのは
最初に1の位を変数aを使って交換、
次は10の位・・・という様に1桁ずつ交換するやりかたです。
(10進で位取りしてるのはその方が分かりやすいと思ったからで
aに0~19が入るなら20進の位取りまでいける。)
他の変数を使わないなら、#8のxorでしょうね。
> 分数型の変数を理論上仮定すれば、a=1/3と格納できますので
確かに格納できそうですが、それだと29/1は格納できなくて
なぜ29/3などは格納ができるのかが凄く疑問に^^;
やっぱり、それなりに実数の精度があるにもかかわらず
20以上の数値を格納できないというのは変ですね。
そういえば変数aもそうですが、変数x、yもどういう数値が入ることがあり得るのかがはっきりしてませんね。
100とか1000もありえるのでしょうか。
(どうせなら、xとyは32bit整数、aは8bit整数とか仮定してくれた方が私としては分かりやすい。)
ご回答ありがとうございます。
>そういえば変数aもそうですが、変数x、yもどういう数値が入ることがあり得るのかがはっきりしてませんね。
100とか1000もありえるのでしょうか。
限定はされていません。講師の中ではもう世界が決まっていて、ただ単に限定しなかっただけなのか、それとも敢えて限定していないのかわかりません。
「-(マイナス)」を使う方法は浮かんだのですが、「上記のような場合もあり得たらどう解けばいいんだろう?」という疑問が浮かび、別解を求めていたところでした。
No.9
- 回答日時:
#3です。
>>a が整数しか扱えない場合でも、可能ですよ。
>そうなんですか。他の方がやっている方法でしょうか?
私が思いついたのは#5さんの回答と同じ方法です。
変数 a に20未満の数値を代入しているので、出題者が想定していた回答かな?と思いました。
研修と言うことなので、出題者の意図しない回答も、逆に高く評価されるかもしれませんね。奇抜な発想、アイデアは、企業にとって必要ですから。
DT50さんの回答も、想定の範囲外ではないでしょうか?
私は、整数しか扱えないと勝手に思い込んでしまい、10で割るという発想はありませんでした。
再びご回答、ありがとうございます。
講師陣から、どの解法を求められているのか・・・。もしくはどの方法でもいいのか・・・。
大雑把な問題だけに、逆に難しい問題ですね(^-^;)。
No.7
- 回答日時:
うーん・問題自体がおかしいですね。
変数aが20以上の数値を格納できないとすることが、意味不明ですね。xに29、yに26しか入っていないという前提でよいなら、
極論すると
26→x
29→y
でOKとなります。
また、
x-y→a
y→x
y+a→y
でも、OKでしょう。
double aとしておくのも、間違いではないですが、
10*aが正確に29となる保証はありません。(double float型のため)
しかしながら、問題自体が、aが20以上格納できない等という、無意味な仮定をしているので、double aとしておくのも、良いと思います。
もし、あなたの回答が、誤りと指摘されたら、
aに20以上格納できないという仮定自体が、非現実的ではあるが、それを仮定して良いなら、double float型で一切誤差が発生しないという仮定は、非現実的ではあるが、そのように仮定しても、良いと考える。
と反論してください。
10÷3→変数aのとき
変数aは、循環小数である3.33333・・・となり
これを正確に格納する変数aは、存在しません。
従ってa×3は10に戻りません。と考えられていますが、
分数型の変数を理論上仮定すれば、a=1/3と格納できますので
a×3は10に戻ります。(通常は、整数型、浮動小数点型しかありませんが)
詳しくご回答頂きまして、ありがとうございます。
教える側は、「aを経由してxとyを変換するには、どのような処理をすればいいか?」ということを求めているのかと思います。
それにしても、問題そのものが大雑把で、「xとyの数値が他の値だと、解けない場合もあるなぁ」なんて考えも浮かんでくるので、どうすればいいのか困ってます(_ _;。
>10÷3→変数aのとき
変数aは、循環小数である3.33333・・・となり
これを正確に格納する変数aは、存在しません。
従ってa×3は10に戻りません。と考えられていますが、
分数型の変数を理論上仮定すれば、a=1/3と格納できますので
a×3は10に戻ります。(通常は、整数型、浮動小数点型しかありませんが)
この考え方はすごいですね。自分は勉強始めたばかりでこれが基本かどうかはわかりませんが、確かに、10で割ったものを10倍させるときに、おかしな現象が起こる可能性もあるんですね。
No.6
- 回答日時:
たしかに 答えは書かないほうがいいのかな
>プログラミングを学ぶ社会人です。研修...
解答は1つじゃないし もしかしたら 解答はないかもしれない。
いろんなパターンをかんがえて その問題の悪い点をよく考え直してください。
あくまで 研修期間なので 100点の答えを書くだけじゃなく そこに 至る頭の回転を 会社は求めています。また デバックをする能力、検証する能力も求めています。
とりあえず 考え方はいい しかし もっといろんな解答ができるはずです。
No.4
- 回答日時:
>変数xには29、変数yには26が入っており
何が入っているかわかっているなら、26→x,29→yでいいのでは?
とも思いますが。。
空の変数aを必要としない
x + y → x
x - y → y
x - y → x
なんていう交換アルゴリズムもあります。
http://ja.wikipedia.org/wiki/XOR%E4%BA%A4%E6%8F% …
ご回答ありがとうございます。
これは思いついていました。・・・が、教える側はこんな単純な方法を求めているのかと不安になりまして、別解を求めていました(*^^*)。
いろいろ方法はあるんですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
VBAの学習について
-
画像の類似検索
-
クモ糸状の経路を最短で結ぶに...
-
2点間の距離の最大値を求めたい
-
Officeのラスタ画像の拡大縮小...
-
BCDについて
-
ランダム関数を作りたい。
-
六曜の自動計算について
-
多変数関数の最小値を求めるプ...
-
OleLoadPictureを使ったソフトを
-
【VisualBasic】ユークリッドの...
-
OpenCVのライセンスについて
-
CRC-CCITT16の算出法
-
一般的な解法を用いないで魔法...
-
ハードディスクの完全消去方式...
-
かけ算に関してのアルゴリズム
-
ドロネー三角形のプログラム
-
スキップリスト(データ構造)の...
-
VBAで仕様書は書きますか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
SNSをやらない理由ってなんです...
-
アルゴリズムとプロトコールの違い
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
期間重複チェックがわかりません
-
最大公約数を求めたい!
-
c言語で画像から文字を認識 キ...
-
C♯で電卓を作成しています。演...
-
多変数関数の最小値を求めるプ...
-
画像から文字を認識してテキス...
-
ハッシュアルゴリズム
-
偏りのある乱数のアルゴリズム
-
乗換案内の作り方が知りたいです。
-
JPEG圧縮で8×8に分割する理由に...
-
書籍のソースコードを別言語に...
-
グループを均等に分けるには?...
-
複数の点を最短距離で全て繋ぐ...
-
gooという検索エンジンの後にGo...
-
シードを考慮したトーナメント...
おすすめ情報