4

昨日、配列を使用せずに 5 つの数値の最大値と最小値を見つけるプログラムを作成するように求められた面接に行きました。

配列を使ってプログラムを作成する方法を知っています。

int largestNumber;
int smallestNumber;
int numbers[n];

largestNumber=numbers[0];
smallestNumber=numbers[0];
for (i=0 ; i<n; i++)
{
if (numbers[i] > largestNumber) 
{
largest = numbers[i];
}
if (numbers[i] < smallestNumber) 
{
smallestNumber= numbers[i];
}
}

しかし、配列を使用せずに作成する方法。何か助けて??

4

16 に答える 16

10

標準入力から取得した任意の数の数値に対して機能します。

#include <algorithm>
#include <iterator>
#include <iostream>

int main()
{
    std::istream_iterator<int> it_begin(std::cin), it_end;
    auto p = std::minmax_element(it_begin, it_end);
    if (p.first != it_end)
        std::cout << "min: " << *p.first << " max: " << *p.second;
}

免責事項:
技術的には、これは C++ 標準で動作する必要はありません。に必要な最小イテレータ カテゴリminmax_elementは、ForwardIteratorどのストリーム イテレータではないかです。入力イテレータが逆参照またはインクリメントされると、そのコピーが逆参照可能である、または他のイテレータと比較可能であることが保証されなくなります。それは私のマシンTMで動作します。:)

于 2013-08-17T07:58:14.537 に答える
5

次のようなことができます。

int min_num = INT_MAX;  //  2^31-1
int max_num = INT_MIN;  // -2^31
int input;
while (!std::cin.eof()) {
    std::cin >> input;
    min_num = min(input, min_num);
    max_num = max(input, max_num);
}
cout << "min: " << min_num; 
cout << "max: " << max_num;

これは、標準入力から eof までの数値を読み取ります (5 か 1,000,000 かは関係ありません)。

于 2013-08-17T07:52:54.907 に答える
0
int findMin(int t1, int t2, int t3, int t4, int t5)
{
    int min1, min2, min3;

    min1 = std::min(t1, t2);
    min2 = std::min(t3, t4);
    min3 = std::min(min1, min2);
    return std::min(min3, t5);
}

int findMax(int t1, int t2, int t3, int t4, int t5)
{
    int max1, max2, max3;

    max1 = std::max(t1, t2);
    max2 = std::max(t3, t4);
    max3 = std::max(max1, max2);
    return std::max(max3, t5);
}

これらの関数は非常に面倒ですが、従うのは簡単なので覚えやすく、2 つの値に最適な単純な min メソッドと max メソッドのみを使用します。

于 2016-04-10T21:54:16.757 に答える
0

これが私の実装です:シンプルで短い

#include <iostream>
#include <cstdio>
using namespace std;


int max_of_five(int a, int b, int c, int d,int e){
    int large= max(max(a, b), max(c,d));
    return max(large,e);

}

int min_of_five(int a,int b,int c, int d,int e){
    int small=min(min(a,b),min(c,d));
    return min(small,e);
}


int main() {
    int a, b, c, d,e;

    scanf("%d %d %d %d %d", &a, &b, &c, &d,&e);
    int ans = max_of_five(a, b, c, d, e);
    int ans1=min_of_five(a,b,c,d,e);
    printf("Max:\t%d\n", ans);
    printf("Min:\t%d", ans1);

    return 0;
}
于 2016-09-09T06:03:36.897 に答える
0

>とは<推移的なプロパティなので、 ifa > bb > c、 then a > c. だからあなたはできる

int a=10, b=6, c=4, d=21, e=4;

int maxNum = a;
int maxNum = max(b, maxNum);
int maxNum = max(c, maxNum);
int maxNum = max(d, maxNum);
int maxNum = max(e, maxNum);
于 2013-08-17T07:53:38.663 に答える
0

物事をシンプルに保つのが好きなら、これが私の解決策です。

標準入力から取得した任意の数の整数に対して機能します。負の整数に対しても機能します。終了したら end を入力します。

#include <iostream>

int main()
{
int max,min,input;
std::cout<<"Enter the number: ";
std::cin>>input;
min=max=input;

while(std::cin>>input){
    if(input>max) max=input;
    if(input<min) min=input;
    std::cout<<"Enter the number: ";
}
std::cout<<"\nMax: "<<max<<"\nMin: "<<min;
}
于 2014-07-18T14:03:54.690 に答える
0

仕分けネットワークを使おう!

#include <iostream>
#include <utility>

int main()
{
    int a, b, c, d, e;
    std::cin >> a >> b >> c >> d >> e;

    if (a < b) std::swap(a, b);
    if (d < e) std::swap(d, e);
    if (c < e) std::swap(c, e);
    if (c < d) std::swap(c, d);
    if (b < e) std::swap(b, e);
    if (a < d) std::swap(a, d);
    if (a < c) std::swap(a, c);
    if (b < d) std::swap(b, d);
    if (b < c) std::swap(b, c);

    std::cout << "largest = " << a << '\n';
    std::cout << "smallest = " << e << '\n';
}
于 2013-08-17T08:12:26.630 に答える
0
int findMin(int t1, int t2, int t3, int t4, int t5)
{
    int min;

    min = t1;
    if (t2 < min)
        min = t2;
    if (t3 < min)
        min = t3;
    if (t4 < min)
        min = t4;
    if (t5 < min)
        min = t5;

    return min;
}
int findMax(int t1, int t2, int t3, int t4, int t5)
{
    int max;

    max = t1;
    if (t2 > max)
        max = t2;
    if (t3 > max)
        max = t3;
    if (t4 > max)
        max = t4;
    if (t5 > max)
        max = t5;

    return max;
}
于 2016-04-10T22:07:16.423 に答える