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

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

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

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

配列

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

Q&A

解決済

2回答

1109閲覧

配列を使用して数字の並べ替えをしたい Cを使用しています

tsukemono

総合スコア1

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

配列

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

0グッド

0クリップ

投稿2021/01/10 09:12

編集2021/01/10 17:33

大学の授業で出された問題です。配列を使っての並び替えの問題でつまずきました。問題内容は以下の通りです。

問題
キーボードから5つの値を入力し、大きい順に並び変えて画面に表示するプログラムを作成せよ。
ただし、配列を使用すること。

※注意点
授業でTAさんに教えてもらったときは配列の次元は一次元で作成できるといわれました。
できれば一次元でできる方法を教えていただきたいです。

※エラー

C++

1#include<stdio.h> 2#include<stdlib.h> 3#include<math.h> 4 5int main() 6{ 7 int a[5], b, c, d,e,f,g; 8 9 for (b = 0; b <= 4; b++) 10 { 11 printf("整数を入力して下さい>>>"); 12 scanf_s("%d", &a[b]); 13 } 14 15 16 for (d = 0; d <= 3; d++) 17 { 18 c = a[d]; 19 f = d; 20 for (b = d; b <= 3; b++) 21 { 22 if (a[b] < a[b + 1]) 23 { 24 c = a[b + 1]; 25 f = b + 1; 26 } 27 28 29 } 30 e = a[d]; 31 a[d] = c; 32 a[f] = e; 33 } 34 35 36 37 38 for (g = 0; g <= 4; g++) 39 { 40 printf("%d\n", a[g]); 41 } 42 43 44 return 0; 45}

このようにして一番大きい数字を配列の一番前の数字と入れ替えていく方法でやりましたが
成功例
1 2 3 4 5  ←入力
5 4 3 2 1  ←出力

エラー例
13 4 10 15 5  ←入力
15 13 5 10 4  ←出力

のようになります。
うまくいく数字もありましたが、まったく法則性が分かりません。どなたかお願いします。

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

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

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

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

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

episteme

2021/01/10 10:06 編集

> 配列を使っての並び替えの問題でつまずきました。 どこで/なににつまずきましたか? 3つの値を入力し、その順番でそのまま画面に表示するプログラム ならできますか?
episteme

2021/01/10 10:10

おっと、編集されたか... 変数名が a,b,c,d,e,f,g ではそれぞれがどんな意味/目的なのかさっぱりわからんです。
kazuma-s

2021/01/10 14:33

#include や main も省略せずに提示してください。 ```C++ #include <stdio.h> .... } ``` このようにソースコードは「```C++」の行と「```」の行で挟むように。 現在のコードは C++ というより C に見えますが。
guest

回答2

0

C++

1#include <iostream> // cin/cout 2#include <algorithm> // sort 3#include <iterator> // begin/end 4#include <functional> // greater 5 6int main() { 7 using namespace std; 8 int data[5]; 9 10 // にゅうりょくして 11 for ( int& item : data ) { cin >> item; } 12 13 // ならびかえて 14 sort(begin(data), end(data), greater<int>()); 15 16 // しゅつりょくする 17 for ( int item : data ) { cout << item << ' '; } 18}

投稿2021/01/10 10:18

episteme

総合スコア16612

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

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

tsukemono

2021/01/10 12:53

返信ありがとうございます。早速試してみます。 このサイトを使用するのが初めてで質問の仕方をあまり理解していませんでした。アドバイスありがとうございます。これから改善していきます。
tsukemono

2021/01/10 17:36

何もないのに隅々まで見ていただきありがとうございます。 本当にありがたいです。
guest

0

ベストアンサー

このようにして一番大きい数字を配列の一番前の数字と入れ替えていく方法でやりましたが

一番大きい数字ではなく、順番が逆転している時の右側を一番前の数字と入れ替えています。

例えば、 a = { 5, 4, 3, 1, 2 } のとき
逆転しているのは 1 と 2 なので、5 と 2 を入れ替えて
a = { 2, 4, 3, 1, 5 } となります。

次の先頭は 4 ですが、逆転しているのは 1 と 5 なので、4 と 5 を入れ替えて
a = { 2, 5, 3, 1, 4 } となります。

最小限の修正は、

diff

1- if (a[b] < a[b + 1]) { 2+ if (c < a[b + 1]) {

投稿2021/01/10 14:28

編集2021/01/10 14:43
kazuma-s

総合スコア8224

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

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

tsukemono

2021/01/10 15:14

すごいです。本当にできました。それと質問に対するアドバイスもありがとうございます。これから気を付けます。ありがとうございます!!
kazuma-s

2021/01/10 15:47

質問の修正依頼に応えてください。
tsukemono

2021/01/10 16:44

すいません、こんな感じでいかがですか
kazuma-s

2021/01/10 17:00

```C++ #include <stdio.h> .... } ``` このようにソースコードは「```C++」の行と「```」の行で挟むように。
tsukemono

2021/01/10 17:34

また修正し直しました。 本当に助かりました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問