No.8ベストアンサー
- 回答日時:
2回ループでやるなら、
まず回答4補足にある方法で一番小さい数を求めます。
その時に一番小さい数が存在する配列番号も一緒に覚えておきます。
で、もう一度最初からループしなおして、
今度は一番小さい数が存在する配列番号を除いた
一番小さい数を求めます。
すると、それは2番目に小さい数になります。
でも、1回ループでもできるし、その方が効率的だと思いますよ。
その場合は、回答4補足にある方法のループの中で
一番小さい数を求めるところを少し工夫します。
まず一番小さい数を覚えておく変数first_minと
二番目に小さい数を覚えておく変数second_minを用意します。
調べるデータがfirst_min以下なら、first_minの値を
second_minに移してからfirst_minに今のデータを覚えます。
それ以外でsecond_min以下なら、second_minに今のデータを覚えます。
あと、first_minとsecond_minを初期化するところも少し工夫が
いりますね。
もしかすると配列が1個しかない場合にどうするか
ということも考える必要があるかもしれません。
これをヒントにコーディングしてみてください。
No.9
- 回答日時:
>for文を使って2番目に小さい値を出力するようにしたいのですが、・・
プログラムって、汎用性があると便利です。
「2番目に小さい値」を出したとたん「5番目は?」と、また作り直すのでは・・。
で、質問者様の No.4 さんへの補足ソースをイジッテみました。
(BorlandC++5.6.4)。
・「1番小さい数」を「任意番目の数」としました(外に for 文追加)。
・任意番目まで求めるには、直前番目までの順番確定状態をなんらかの形で「保存」しておく必要があります。
・ここでは、データ配列の先頭から小さい順に「入れ換える」というかたちで「保存」しました。
・入れ換えは、両手に持った2つのコップの内容物の入れ換えを想定すると判り易いかと・・。
他に、空コップ(ここでは min )ひとつが必要ですよね。
・全データ個数分入れ換えると、データ配列は、小さい順に並び換わります → 「ソート」。
結果
・習っていない「ソート」の「ひとつの手法」が習得できました。
・質問者様のソースが、中核?であったことがわかったはず(下の k を 0 で固定)。
課題
・「何番目の数」でなく「全体ソート」にするには、・・iTarget 部分は・・?
・下のソースは、内側の for 文で、条件に合った都度、入れ換えているが・・?
#include <stdio.h>
int GetOrderVal( int iCnt, int iTarget, int data[] )
{
int min = -999, i, k;
for( k = 0; k < iTarget; k++ ){ // 任意番目まで
min = data[ k ];
for( i = ( k + 1 ); i < iCnt; i++ ){
if( min > data[ i ] ){ // 新たな小さい値
min = data[ i ]; // 以降、入れ換え作業
data[ i ] = data[ k ]; // 前のステップで「空」にしたものに代入
data[ k ] = min; // 〃 結果 [ i ] と [ k ] が入れ換わる
}
}
}
return( min );
}
void main()
{
int data[ 50 ] = { 1, 1 ,3, 3, 5, 6 };
printf( "%d\n", GetOrderVal( 6, 2, data ) ); // 2番目に小さい数
printf( "%d\n", GetOrderVal( 6, 5, data ) ); // 5番目 〃
}
注:インデントに全角空白を用いています。タブに一括変換して下さい。
No.7
- 回答日時:
つまり, 「最小値を求める」ためには「現在までの暫定的な最小値」を記憶しておけばいいということですね. では, 「2番目に小さい値」を求めるためにはどうすればいいと思いますか? なお, 「現在までの暫定的に 2番目に小さい値」だけ覚えておいてもダメだということは予め指摘しておきましょう.
理論的には「k番目に小さい値」のみがほしいなら線形時間なんだけど, 実際にはソートした方が速かったりするのは事実>#5.
No.6
- 回答日時:
#2です。
ちょっと考えてみたのですが、無理にfor1個でやるよりも、for2個のほうが楽そうです。どうもすみません。
ところで、こういうケースはどうなるのでしょうか?
配列の中身が例えば
1,1,3,3,5,6
だった場合、一番小さな数はもちろん1ですが、2番目に小さい数は1なのでしょうか?それとも3なのでしょうか?
No.5
- 回答日時:
No.3です。
No.3の回答の方法で処理を実現し、入力値全部についてできるように
拡張してからソートを習うと
“結局、ソートした方が早いじゃん!”
と思うようになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- JavaScript jsで、配列内の文章を改行する際どのようにすればいいですか。 3 2022/07/05 20:40
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
プログラミングで二番目に大きい数を表示する
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(VBA) Dir 関数で取得するファ...
-
C# DataGridView のヘッダーセ...
-
VB.NETでファイル名順にファイ...
-
C# DataTableの行をソートしてD...
-
System.IO.Directory.GetFiles...
-
C言語でファイルの中身をソー...
-
ListViewのソートについて
-
excel VBA リストビューの行...
-
ファイル名「1.jpg ~10.jpg~...
-
2次元配列を複数項目でソートし...
-
vbでDataTableの抽出コピー
-
リスト構造のソートで悩んでま...
-
VB6でデータを昇順に並べ替える
-
配列内のデータのソート
-
列のどこをクリックしてもソー...
-
DataGridView の sort
-
データベースにテキスト型で入...
-
VBA基本構文の作り方 2列の...
-
excel VBA の条件をつけての列...
-
Excel VBA で別シートにデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
あるディレクトリ内のファイル...
-
C言語・要素除去
-
ファイル名「1.jpg ~10.jpg~...
-
Excelですべての組合せ(重複組...
-
C言語でアナグラムを求めるプロ...
-
2次元配列を複数項目でソートし...
-
C# DataTableの行をソートしてD...
-
DataGridViewソート時に先頭行...
-
n番目に大きい数を求めるアル...
-
DataGridViewの複数列を連動し...
-
VBA基本構文の作り方 2列の...
-
配列の問題
-
10個の整数を入力して小さい順...
-
構造体配列の並べ替え
-
vbでDataTableの抽出コピー
-
リスト構造のソートで悩んでま...
-
DataGridViewの昇順降順。
おすすめ情報