こんにちは。
自分はプログラミングを学ぶ社会人です。研修を受けておりまして、以下のような問題を出されたのですが、このような考えは正しいでしょうか?それとも手順を変えたほうがよろしいでしょうか?
<問題>
変数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で質問しましょう!
似たような質問が見つかりました
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- Ruby プログラミング 3 2023/06/09 14:30
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Excel(エクセル) エクセル、日々の集計整理方法。(再送です。) 5 2022/10/02 00:19
- その他(プログラミング・Web制作) プログラミング python 3 2023/06/14 03:55
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- Excel(エクセル) Excelで行削除をすると… 1 2023/07/26 11:57
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- その他(資産運用・投資) 海外銀行の預金がなかなか返してもらえません。 3 2023/03/02 20:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Stuck
-
正しい五十音順について
-
Dijkstraて
-
m個の数字をn個のグループに分...
-
アルゴリズムの将来性について
-
[ EXCEL VBA ] 図形を読み込む...
-
ASPでのオークション
-
ルービックキューブの解法プロ...
-
リーグ戦日程表作成アルゴリズ...
-
迷路プログラム
-
確率論的な麻雀の勝ち方を教え...
-
VB2010にて分数表示(約...
-
【VisualBasic】ユークリッドの...
-
初心者がディープラーニングの...
-
5人のテストの点数を入力すると...
-
ガウス・ジョルダン法のプログ...
-
複数の点を最短距離で全て繋ぐ...
-
アルゴリズムとプロトコールの違い
-
A*アルゴリズム
-
最大公約数を求めたい!
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
Dijkstraて
-
Stuck
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
アルゴリズムとプロトコールの違い
-
期間重複チェックがわかりません
-
グループを均等に分けるには?...
-
三次元形状曲面の導出法
-
あいまい検索(文字列一致率)
-
Visual studio2019 C#で生まれ...
-
gooという検索エンジンの後にGo...
-
フリーセルの難易度について
-
CRC-CCITT16の算出法
-
経路探索について
-
C♯で電卓を作成しています。演...
-
理系の高校生です。大学で情報...
-
OpenCVのライセンスについて
-
偏りのある乱数のアルゴリズム
-
詰め将棋をとくのは、アルゴリ...
おすすめ情報