c言語の二番目に大きい数字を表示するプログラムについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
KA

c言語の二番目に大きい数字を表示するプログラムについて

#1

投稿記事 by KA » 9年前

Ç言語で最大値と二番目に大きい数字を求めるプログラムを作ったのですが一番初めに最大値を入力すると二番目に大きい数字をが入力できません
どうしたら解決しますか?

コード:

#include <stdio.h>
 
int main(void)
{
    int n,ten,t[100],cnt,i=0,max,scn;
    scanf("%d",&ten);
    while(ten!=999)
    {
    	printf("%d点\n",ten);
    	t[i]=ten;
    	i++;
    	scanf("%d",&ten);
    }
    n=i;
    max=t[0];
    scn=t[0];
    for(i=0;i<n;i++)
    {
    	if(max<t[i]){
    	scn=max;
    	max=t[i];}
    }
    printf("最高点=%d点\n",max);
    printf("二番目の点数=%d点\n",scn);
    printf("順番 得点\n");
    for(i=0;i<n;i++)
    {
    	if(t[i]==max)
    	printf("%3d  %3d 最高点\n",i+1,t[i]);
    	else if(t[i]==scn)
    	printf("%3d  %3d 二番目の点数\n",i+1,t[i]);
    	else
    	printf("%3d  %3d\n",i+1,t[i]);
    }
    return 0;
    
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: c言語の二番目に大きい数字を表示するプログラムについて

#2

投稿記事 by みけCAT » 9年前

KA さんが書きました:一番初めに最大値を入力すると二番目に大きい数字をが入力できません
一番初めに最大値を入力しなければ二番目に大きい数字をが入力できる(原文ママ)とは限らないですよね。
例えば

コード:

100 200 150 999
という入力に対しても間違った出力をするでしょう。
KA さんが書きました:どうしたら解決しますか?
今のように無条件に最大値が更新されたら今までの最大値を二番目に大きい数字とみなすのではなく、

最大値より大きいか?-YES→これまでの最大値を二番目に大きい数字として、最大値を更新

NO

二番目に大きい数字より大きいか?-YES→二番目に大きい数字を更新

NO

更新しない

のようにするといいでしょう。
また、初期値は、データが足りない(0項目しかない、1項目しかない、同じ数値のみ)場合があることに気をつけつつ、
基本はとりあえず最初に見つかった2個の異なる数値を最大値と二番目に大きい数字としておくといいでしょう。
もちろん最大値の方が二番目に大きい数字より大きくなりようにしないといけません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

KA

Re: c言語の二番目に大きい数字を表示するプログラムについて

#3

投稿記事 by KA » 9年前

条件を見なおして何とか解決することができました
アドバイスありがとうございます

閉鎖

“C言語何でも質問掲示板” へ戻る