質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

195閲覧

C++の配列についてです。

akaka2

総合スコア15

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2018/11/05 08:59

編集2018/11/05 10:41
  • リスト

前提・実現したいこと

C++をやっており、配列内の最小値をみつけたいのですが
中身が入っている(入力されている)ものだけの最小値をしりたいのですが、どのようにすればよいでしょうか。

下のソースコードにあるような形でプログラムを書きました。
見てくだされば分かると思いますが、2つ目のfor文は、無限が入っているため計算できません。

最初のfor文でINT_MAXを入れた理由は、0を入れると3つ目のfor文(最小値を求める)で0を求めてしまうためです。

ですが、2つ目のfor文では、hikakuの中身を2回足すわけですが、初めにhikakuにはINT_MAXが入ってしまっているため、
hikaku[i] = ∞ + eになってしまっています。

私は、最初にhikakuの中に0を入れて、hikakuの配列の入力されたものだけで最小値を求めたらいいと思ったのですが、どのようにすればいいでしょうか。

何も定義していなければhikakuの中には0が入ってしまいますよね。どうすれば入力された中身だけで最小値が得られるでしょうか・・・。
見にくいプログラムだと分かっておりますが、困っております。
お願いいたします。


追記です。
2つ目のfor文は絶対に必要な処理なので、これをする前提でお考え下さい。
この2つ目のfor文のせいでhikakuにINT_MAXを入れることができないのです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

int hikaku[6]; int c[6][6]; int e; int i; i = 1; だとします。 for(int f = 1; f <= 5; f++){ //hikaku[1~5]にINT_MAXを入れます。 hikaku[f] = INT_MAX; } for(int z = 1; z <= 3; z++){ hikaku[i] += e; e = c[i][e];   //ここでeの値が変わります。 z++; int min = hikaku[1]; int min_no = 1; for(int i = 2; i <= 5; i++){ //これで最小値と最小値の添え字番号を求めています。 if(min > hikaku[i]){ min = hikaku[i]; min_no = i; } }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

C++は忘れて、C風でいいなら、
配列は、インデックスが0から始まって、size 個の要素があるとします。

int min, min_no, a[size] ; min = a[min_no=0] ; for( i = 1 ; i < size ; i ++ ) if(min < a[i] ) min = a[min_no=i] ; printf("minimal is %d when index is %d\n",min,min_no); コード

投稿2018/11/06 00:39

gm300

総合スコア580

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C++ならばstd::mapを使うといいのではないでしょうか?

c++

1#include <map> 2#include <iostream> 3#include <algorithm> 4 5int main(){ 6 std::map<int,int> hikaku; 7 hikaku[4] = 6; 8 hikaku[2] = 99; 9 hikaku[5] = 3; 10 11 int min = std::min_element(begin(hikaku),end(hikaku), 12 [](auto &a, auto &b) { 13 return a.second < b.second; 14 } 15 )->second; 16 std::cout << min << std::endl; 17}

投稿2018/11/05 09:21

編集2018/11/05 09:24
asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

配列0オリジンでやってないやらいろいろありますが、
比較自体は間違ってませんが、

C++

1for(int z = 1; z <= 3; z++){ 2 hikaku[i] += e; 3 e = c[i][e];   //ここでeの値が変わります。 4 z++;

これいります?

サンプル

C++

1#include <stdio.h> 2#include <limits.h> 3 4int main(void) 5{ 6 int arr[5]; 7 int length = sizeof(arr) / sizeof(int); 8 for(int i = 0; i < length; i++) { 9 arr[i] = INT_MAX; 10 } 11 12 // 入力したい分 13 scanf("%d", &arr[0]); 14 scanf("%d", &arr[1]); 15 scanf("%d", &arr[2]); 16 scanf("%d", &arr[3]); 17 18 int min = arr[0]; 19 int min_no = 0; 20 for(int i = 0; i < length; i++) { 21 if(min > arr[i]){ 22 min = arr[i]; 23 min_no = i; 24 } 25 } 26 27 printf("最小値: %d, インデックス: %d\n", min, min_no); 28 29 return(0); 30}

投稿2018/11/05 09:18

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問