web-dev-qa-db-fra.com

Programme pour trouver le plus grand et le plus petit parmi 5 nombres sans utiliser de tableau

Hier, je suis allé pour une entrevue où on m'a demandé de créer un programme pour trouver le plus grand et le plus petit des 5 nombres sans utiliser de tableau. 

Je sais comment créer le programme en utilisant array.

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];
}
}

Mais comment le créer sans utiliser de tableau. De l'aide??

4
user2638798
#include <algorithm>
#include <iostream>

template <typename T>
inline const T&
max_of(const T& a, const T& b) {
    return std::max(a, b);
}

template <typename T, typename ...Args>
inline const T&
max_of(const T& a, const T& b, const Args& ...args) {
    return max_of(std::max(a, b), args...);
}

int main() {
    std::cout << max_of(1, 2, 3, 4, 5) << std::endl;
    // Or just use the std library:
    std::cout << std::max({1, 2, 3, 4, 5}) << std::endl;
    return 0;
}
19
Dieter Lücking

Fonctionne pour n’importe quel nombre de nombres issus de l’entrée standard:

#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;
}

Avertissement:
Techniquement, cela n’est pas nécessaire pour fonctionner avec la norme C++. La catégorie d'itérateur minimale requise pour minmax_element est ForwardIterator, ce que les itérateurs de flux ne sont pas. Une fois qu'un itérateur d'entrée est déréférencé ou incrémenté, il n'est plus garanti que ses copies soient déréférencables ou comparables aux autres itérateurs. Ça marche sur ma machineTM. :)

10
jrok

Vous pouvez faire quelque chose comme ça:

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;

Ceci lit les nombres de l'entrée standard jusqu'à la fin (peu importe combien vous avez - 5 ou 1 000 000).

5
mvp

Par exemple 5 numéros consécutifs 

int largestNumber;
int smallestNumber;
int number;
std::cin>>number;
largestNumber = number;
smallestNumber = number;
for (i=0 ; i<5; i++)
{
   std::cin>>number;
   if (number > largestNumber) 
   {
     largest = number;
   }
   if (numbers < smallestNumber) 
   {
     smallestNumber= number;
   }
}
1
Elvin Mammadov

Voici ma mise en œuvre: simple et court

#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;
}
0
essymizo
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;
}
0
Thiresan Naidoo

Utilisez un réseau de tri!

#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';
}
0
Blastfurnace

Si vous aimez garder les choses simples, voici ma solution.

Cela fonctionne pour n'importe quel nombre d'entiers pris de l'entrée standard. Cela fonctionne aussi pour les entiers négatifs. Entrez end lorsque vous avez terminé.

#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;
}
0
user3834119

Ce n'est pas une réponse efficace mais cela fonctionne toujours 

int a,b,c,d,e,largest;
if ((a>b) and (a>c) and (a>d) and (a>e))
{    
    largest=a;
}
else if ((b>a) and (b>c) and (b>d) and (b>e))
{    
    largest=b;
}
else if ((c>a) and (c>a) and (c>d) and (c>e))
{    
    largest=c;
}
else if ((d>a) and (d>c) and (d>a) and (d>e))
{    
    largest=d;
}
else 
{
largest=e;
}

vous pouvez utiliser une logique similaire pour respecter la plus petite valeur

0
Sushruth Siv

Let max tiendra le maximum de 5 nombres. Attribuer le premier numéro à max. Prenez le deuxième nombre et comparez-le avec max si le deuxième nombre est supérieur à max, puis affectez-le à max sinon ne faites rien. Ensuite, prenez le troisième nombre et comparez-le avec max. Si le troisième nombre est supérieur à max, affectez-le à max sinon ne faites rien. Faites la même chose pour les 4ème et 5ème numéros. Enfin, max tiendra le nombre maximum de 5.

0
Atish Bundhe
void main()
{
int a,b,c,d,e,max;
    max=a;
    if(b/max)
        max=b;
    if(c/max)
        max=c;
    if(d/max)
        max=d;
    if(e/max)
        max=e;
    cout<<"Maximum is"<<max;
}
0
Rajat Garg

Les > et < sont des propriétés transitives, donc si a > b et b > c, alors a > c. Afin que vous puissiez

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);
0
xanatos
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);
}

Ces fonctions sont très compliquées, mais faciles à suivre et donc faciles à mémoriser. Elle utilise uniquement les méthodes simples min et max qui fonctionnent le mieux pour 2 valeurs.

0
Thiresan Naidoo

Heres ce que j'ai fait, sans utiliser un tableau. C'était une méthode pour renvoyer le plus grand nombre de 5 scores.

double findHighest(double score1, double score2, double score3, double score4, double score5)
 {
   double highest = score1;
   if (score2 > score1 && score2 > score3 && score2 > score4 && score2 > score5)
      highest = score2;
   if(score3 > score1 && score3 > score2 && score3 > score4 && score3 > score5)
      highest = score3;
   if(score4 > score1 && score4 > score2 && score4 > score3 && score4 > score5)
      highest = score4;
   if (score5 > score1 && score5 > score2 && score5 > score3 && score5 > score4)
      highest = score5;
   return highest;
 }

Un tableau sera beaucoup plus efficace, mais je devais le faire comme devoir sans utiliser de tableau. 

0
Zak

Vous pouvez utiliser list (ou vector), qui n'est pas un tableau:

#include<list>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
    list<int> l;
    l.Push_back(3); 
    l.Push_back(9); 
    l.Push_back(30);    
    l.Push_back(0); 
    l.Push_back(5); 

    list<int>::iterator it_max = max_element(l.begin(), l.end());
    list<int>::iterator it_min = min_element(l.begin(), l.end());

    cout << "Max: " << *it_max << endl;
    cout << "Min: " << *it_min << endl;
}
0
cpp