- ベストアンサー
アルゴリズムだけでも教えてください。
C言語ド初心者のものです。 以下のプログラムを書かないといけないのですが、どのように組み立てればいいか、アイデアさえ思いつきません。 アルゴリズムだけでも教えていただけないでしょうか? できればプログラムのほうもお願いしたいのですが・・・。 よろしくお願いします。 問題文: 「以下の例で、左が1時間ごとの時間、右のデータが火山に設置されたメーターによって計測された、地面の角度(水平方向とのなす角、°)を示します。「噴火が起きる」という定義は、値が1時間前の値より10%以上下がっている時とします。 例: 00 20.54 01 20.62 02 20.77 03 20.92 04 18.63 05 18.50 06 20.12 07 21.39 08 21.52 09 20.55 10 21.46 11 22.71 12 22.83 13 23.01 14 18.01 15 15.73 16 15.68 17 16.03 という入力に対して、出力は: 山は3において膨張している 噴火が3と4の間で起きている 噴火が5と6の間で終わる 山は8において膨張している 膨張は9において終わる 山は12において膨張している 噴火が13と14の間で起きている 噴火が16と17の間で終わる 」 と言う風に出力されればOKです。 if文やwhile文など基本的な構造でできるそうですが、混乱してわかりません。 よろしくお願いします。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (9)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
- Trick--o--
- ベストアンサー率20% (413/2034)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
- Trick--o--
- ベストアンサー率20% (413/2034)
- Trick--o--
- ベストアンサー率20% (413/2034)
- Trick--o--
- ベストアンサー率20% (413/2034)
- a-saitoh
- ベストアンサー率30% (524/1722)
- Trick--o--
- ベストアンサー率20% (413/2034)
関連するQ&A
- 組み合わせ問題のアルゴリズム
あらかじめ用意された整数を足して、その合計がある指定された整数と等しくなる組み合わせの数を調べるプログラムを書こうとしているのですが、苦労しています。 具体例がないと伝わりにくいかもしれないので例をあげると、 例えばあらかじめ用意された整数というのが 1・1・2・2・5・8 の4つで、 指定された整数が10である場合は、 8と2 8と1と1 5と2と2と1 という3通りの組み合わせがあるので、3を出力したいというわけです。 今まではもっと単純なアルゴリズムしか考えてこなかったので、こういった組み合わせのような問題が難しく感じられます。 こういう場合、アルゴリズムはどのようなものが考えられるでしょうか。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- うるう年判定のアルゴリズム
javaでうるう年判定のプログラムを作成しています。 プログラム自体はサーバにアップするときに実行結果が正しいかどうかテストされます。 仕様としては、 1.時間に関するAPIなどは一切使わずに完全に自作 2.入力される値はLong型の"秒"数(APIで提供されているのはミリ秒ですが) 3.60537895631062456L などの入力値に対して、年/月/日 (曜日) 時:分:秒 yday=元旦からの経過日数 を出力 最初は以下の関数を使用してループをかけていたのですが、仕様3の入力値に対して50秒近くかかってしまい、上手くいきませんでした。 public static int isLeap(int year){ if(year%4==0 && (year%100!=0 || year%400==0)) return 1; return 0; } 問題点はループ回数が多いことで、作る時点で分かってはいたのですが、ここまで遅くなるとは思っても見ませんでした。 これを使わない方法としては、一回だけうるう年(=n)を見つけ、その後は「(n+4)との比較+100で割り切れず400で割り切れる場合は別」という処理を行うことによって、処理時間を30秒付近にまで短縮することができたのですが、どうも10~15秒以内で終わらせなければテストにパスすることができないようです。 なんとか色々考えてはみたものの、上手いアルゴリズムは思いつきませんでした。 うるう年を処理するための"高速な"アルゴリズムはないのでしょうか。 お知恵を貸してください。よろしくお願いします。
- ベストアンサー
- Java
- うるう年判定のアルゴリズム
javaでうるう年判定のプログラムを作成しています。 プログラム自体はサーバにアップするときに実行結果が正しいかどうかテストされます。 仕様としては、 1.時間に関するAPIなどは一切使わずに完全に自作 2.入力される値はLong型の"秒"数(APIで提供されているのはミリ秒ですが) 3.60537895631062456(Long値) などの入力値に対して、年/月/日 (曜日) 時:分:秒 yday=元旦からの経過日数 を出力 最初は以下の関数を使用してループをかけていたのですが、仕様3の入力値に対して50秒近くかかってしまい、上手くいきませんでした。 public static int isLeap(int year){ if(year%4==0 && (year%100!=0 || year%400==0)) return 1; return 0; } 問題点はループ回数が多いことで、作る時点で分かってはいたのですが、ここまで遅くなるとは思っても見ませんでした。 これを使わない方法としては、一回だけうるう年(=n)を見つけ、その後は「(n+4)との比較+100で割り切れず400で割り切れる場合は別」という処理を行うことによって、処理時間を30秒付近にまで短縮することができたのですが、どうも10~15秒以内で終わらせなければテストにパスすることができないようです。 なんとか色々考えてはみたものの、上手いアルゴリズムは思いつきませんでした。 うるう年を処理するための"高速な"アルゴリズムはないのでしょうか。 お知恵を貸してください。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 二分探索アルゴリズムの問題の解法
二分探索アルゴリズムを用いて、N件のレコードを持つ表の中からキーの値がkに一致するレコードを探し出す探索を考える。この探索について以下の問いに答えよ。 1)このアルゴリズムにおいて最も計算時間が短くなるのは、どのような場合か? 2)このアルゴリズムにおいて最も計算時間が長くなる場合の時間計算量をNのオーダーで表せ。 全くわからないので教えていただいたら、ありがたいです。 一応二分探索なのでO(logN)だけはわかります。 宜しくお願いします。
- 締切済み
- その他(プログラミング・開発)
- 大阪 生駒山は火山か
大阪の生駒山が火山なのかという質問です。 (社会とか歴史のカテゴリだったでしょうか・・・?) Wikipediaで「火山の一覧(日本)」と調べると、生駒山は 含まれていません。 ただ、注意書きに 「噴火によって直接できた地形が残っていないものは火山の定義に合致しないので、このリストに追加しないでください。特に、第三紀の火山岩からなり、侵食による削れ残りが山の形をしているものは間違えやすいので注意してください。 例:二上山、耳成山、畝傍山…など。 」 との記述がありました。 例に挙げられている「二上山」とは生駒山地の近くに位置しています。 「火山岩からなり、侵食による削れ残りが山の形をしているもの」 というのは・・・火山活動でできた山でも火山に数えないものがある ということなんでしょうか・・・?火山の定義があるんですね・・・。 また、 http://www2.mus-nh.city.osaka.jp/learning/geoguid/kakougan.html http://kosmochlor3.at.webry.info/200904/article_2.html 以上のHPなどには、 「死火山。 しかし、中央構造線と直交する西の県境、生駒山地⇒ 金剛山地の断層線の直下には今なお重力異常が認められる。」 などの記述もありました・・・。 対して「褶曲(しゅうきょく)山地説が有力となっている。」との記述 があるのが以下のHPです。 http://100.yahoo.co.jp/detail/%E7%94%9F%E9%A7%92%E5%B1%B1%E5%9C%B0/ まだ判明していないということなのでしょうか? 詳しい方よろしくお願いします。
- ベストアンサー
- 地学
- アルゴリズムでわからない問題があります。(C言語)
問題1:探索アルゴリズムであるハッシュ法について正しいものを選べ。 (1)ハッシュ関数の出力によりデータを格納した配列の先頭から順番に調べる. (2) 入力データを,ハッシュ関数の出力により求めた格納場所に基づいて,あらかじめ木構造に格納しておく. (4) 入力データを格納した配列を繰り返し2つに分割し,それぞれを順番に調べていく. (3) 入力データから格納場所の位置に変換する関数(ハッシュ関数)の出力により,データの探索場所を決定する。 (5) 入力データを,ハッシュ関数の出力により求めた格納場所に基づいて,あらかじめヒープに格納しておく 問題2:探索アルゴリズムであるハッシュ法について正しくないものを選べ。 (1)入力データはハッシュ値で決められる場所に格納される. (2) ハッシュ関数には,異なる入力の値に対し異なる値を出力することが求められる. (3) ハッシュ関数の時間計算量は,入力データのサイズに比例する. (4) データの格納場所が大きい方が効率がよい. (5) 一般に2分探索法より高速に動作する. どなたかアルゴリズムに詳しい方回答お願いします
- 締切済み
- C・C++・C#
- ガウシアンフィッティングのアルゴリズム
c言語等を用いて実験データの解析を行おうと思っています。 データの形式は(x・・・時間軸、y・・・値)の列になっていて、 これをグラフにすると、パルス状の波形が連続する形になっています。 求めたい情報は、各パルス波形の山に対応する時刻の羅列 なのですが、現在ではガウス曲線近似機能のついたグラフソフトで、 一個一個手作業で求めています。 これを、解析プログラムを作って自動化しようと思っているのですが、 ガウス曲線(鋭い立ち上がりの)に近い部分を自動的に検出する方法、 また、フィッティングを数値計算的に行う方法がわかりません。 このようなアルゴリズムを考える上で参考になるようなHPや文献を ご存知の方がいらっしゃれば、教えていただきたいと思っています。
- ベストアンサー
- 数学・算数
- Perlのアルゴリズムについて教えてください!
データファイルAとデータファイルBからデータを受け取って、データファイルB中の第i番目の文Siの重要度を式1に基づいて計算して、重要度と順位(重要度の高い順に1位、2位、、)を各文Siに付与するアルゴリズムを考える場合、式1のWi,jは文Siに出現するj番目の単語で、niはSiに出現する単語の数となる。Wi,jの出現頻度はファイルAから得られるものとする。 /*データファイルA*/ はじめ:␣12 改行 こる:␣1 改行 いく:␣23 改行 みせ:␣4 改行 ... というように前に文字列(基本形)が入り後ろに数字が記載されているデータ /*データファイルB*/ はじめ␣はじめ␣形容詞 改行 こる␣こる␣形容詞 改行 ... EOS 改行 ... ␣は空文字 1.ファイルAにまだ読み込んでいない行がある限り繰り返す 1-1.ファイルから一行読み込む 1-2.その行の基本形用のカウンタを用意して、そのカウンタにその基本形の出現頻度を代入する。 2.文番号カウンタと文重要度変数を用意して、初期値をそれぞれ1と0にする。 3.データファイルBにまだ読み込んでいない行がある限り繰り返す 3-1.ファイルから1行読み込む 3-2.もしその行がEOSであれば、文番号カウンタと文重要度変数の値を出力する。その後、文重要度変数を0にして、文番号カウンタを1増やす。 3-3.これ以降のアルゴリズムが解けないので教えてください。
- 締切済み
- Perl
お礼
ありがとうございます。 何とかプログラムできました。