0
#include<iostream>
using namespace std;
int count(float v[100],int n)
{
    int i,nr=0;
    float m;
    m=(v[0]+v[n-1])/2;
    for(i=0;i<n;i++)
        if(v[i]>=m)
            nr++;
    return nr;
}
int main()
{
    int i,n,ok=0;
    float v[100];
    cin>>n;
    for(i=0;i<n;i++)
        cin>>v[i];
    if(v[0]==v[n-1])
        ok=1;
    if(count(v,n)==2 && ok==1)
        cout<<"YES";
    else
        if(ok==0 && count(v,n)==1)
            cout<<"YES";
        else
            cout<<"NO";
}

このプログラムは、配列内の最初と最後の数字が、それぞれの配列にある最小値であるかどうかをチェックすると思われます。これは、タイトルが示すように、数値を最初と最後の数値の算術平均と比較することによって行われます

問題は、そうではないということです。どのような値を入力しても、「NO」のみが表示されます (これらの数値が最小ではないことを意味します)。何百回も経験しましたが、何が問題なのか本当にわかりません...どんな助けもいただければ幸いです。

4

2 に答える 2

1

あなたのアルゴリズムは根本的に欠陥があり、あなたが望むことをしません (最初と最後の数字が 2 つの最小値であるかどうかを確認してください)。次の配列を検討してください。

2, 19, 19, 19, 19, 20

最初の要素を除くすべての要素が平均よりも大きい ( 11) が、最後の要素は最小の 2 つのうちの 1 つではなく最大のものです。

partial_sortこれを解決する実際の最も簡単な方法は、最初の 2 つの要素 (必要に応じて一時コンテナー内) で、元のデータの最初と最後の要素と一致するかどうかを確認することだと思います。

于 2013-06-07T17:09:54.257 に答える