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

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

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

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

Q&A

3回答

10365閲覧

入力した数値の最大値、2番目に大きい数値、3番目に大きい数値

shou8712

総合スコア6

C++

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

0グッド

0クリップ

投稿2018/04/08 19:57

10個の整数を入力して、1番大きい数値、2番目に大きい数値、3番目に大きい数値を表示したいのですがうまくいきません。
3番目の数値が0になってしまいます。
改善の仕方を教えていただければ幸いです。

該当のソースコード

#include <stdio.h> int main(void) { int number[10]; int no_1 = 0; int no_2 = 0; int no_3 = 0; int i; printf("10個の整数を入力\n"); for (i = 0; i<10; i++) { scanf("%d", &number[i]); if (no_1 < number[i]) { no_2 = no_1; no_1 = number[i]; } else if (no_2 < number[i]) { no_3 = no_2; no_2 = number[i]; } } printf("1番目に大きい数字は%dです。\n", no_1); printf("2番目に大きい数字は%dです。\n", no_2); printf("3番目に大きい数字は%dです。\n", no_3); return 0; }

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

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

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

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

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

guest

回答3

0

あえてモダンなC++で書いてみると

C++

1#include <iostream> 2#include <algorithm> 3 4int main() 5{ 6 int v[10]; 7 int top3[3]; 8 9 for(int& it : v) 10 std::cin >> it; 11 12 using std::begin; 13 using std::end; 14 std::partial_sort_copy( begin(v), end(v), 15 begin(top3), end(top3), 16 [](int a, int b){return a > b;} ); 17 int top_n = 0; 18 for(int& it : top3) 19 std::cout << ++top_n << "番目に大きい数字は" << it << "です。" << std::endl; 20}

投稿2018/04/08 23:15

asm

総合スコア15147

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

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

0

c

1#include <stdio.h> 2 3int main(void) { 4 int number; 5 int no_1 = 0; 6 int no_2 = 0; 7 int no_3 = 0; 8 9 printf(" 0 以上の整数を入力 (0 で終了)\n"); 10 for (int i = 0; i < 10; i++) { 11 scanf("%d", &number); 12 if (number <=0 ) { 13 break; 14 } 15 16 if (no_1 < number) { 17 no_3 = no_2; 18 no_2 = no_1; 19 no_1 = number; 20 } 21 else if (no_2 < number) { 22 no_3 = no_2; 23 no_2 = number; 24 } 25 else if (no_3 < number) { 26 27 no_3 = number; 28 } 29 } 30 31 printf("1番目に大きい数字は%dです。\n", no_1); 32 printf("2番目に大きい数字は%dです。\n", no_2); 33 printf("3番目に大きい数字は%dです。\n", no_3); 34 return 0; 35}

num_1, num_2, num_3 を num[] 配列で扱うようにすれば、もっとコードは短くできそうに思います。

4 つの配列をつくる、num[0] に入力した値をいれたら、それを昇順にソートする。
そうすれば常ににいままでいれた数字の上位 3 つが常に num[1], .. num[3] に在るようになります。

投稿2018/04/08 21:43

katoy

総合スコア22324

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

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

0

こんにちは、
まず10個のデータを大きい順にソートして for文で大きい順に3つ 出力すればいいと思います。
(入力するデータがすべて異なるデータであることを前提としています。すみません)
(3という数字も記号定数にすべきかもしれません)

C++

1#include <stdio.h> 2#include <stdlib.h> 3 4#define BUFSIZE 256 5#define MAX_NUMBER 10 6 7int main(void) 8{ 9 char buf[BUFSIZE]; 10 int num[MAX_NUMBER]; 11 int answer[3]; 12 int i,j; 13 int tmp; 14 15 for(i = 0; i < MAX_NUMBER; i++){ 16 fgets(buf,sizeof(buf),stdin); 17 num[i] = atoi(buf); 18 } 19 20 for(i = 0; i < MAX_NUMBER; i++){ 21 for(j = i + 1; j < MAX_NUMBER; j++){ 22 if(num[i] < num[j]){ 23 tmp = num[i]; 24 num[i] = num[j]; 25 num[j] = tmp; 26 } 27 } 28 } 29 30 for(i = 0; i < 3; i++){ 31 printf("%d番目に大きな数字は%dです。\n",i + 1,num[i]); 32 } 33 34 return 0; 35}

投稿2018/04/09 05:40

編集2018/04/09 05:49
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問