Home > Back-end >  How to include multiple variables in max() function?
How to include multiple variables in max() function?

Time:12-04

I have this simple but long code that outputs the electron arrangement when user inputs the atomic number of wanted element.

    #include<iostream>
using namespace std;

int main()
{
    int n, s1, s2, p2, s3, p3, s4, d3, p4, s5, d4, p5, s6, f4, d5, p6, s7, f5, d6, p7;
    cout << "Atomic number: ";
    cin >> n;
    
    if(n<=2){
    s1 = n;
    }
    else if(n>=2){
    s1 = 2;
    }
    
    if(n<=4){
    s2 = n-2;
    }
    else if(n>=4){
    s2 = 2;
    }
    
    if(n<=10){
    p2 = n-4;
    }
    else if(n>=10){
    p2 = 6;
    }
    
    if(n<=12){
    s3 = n-10;
    }
    else if(n>=12){
    s3 = 2;
    }
    
    if(n<=18){
    p3 = n-12;
    }
    else if(n>=18){
    p3 = 6;
    }
    
    if(n<=20){
    s4 = n-18;
    }
    else if(n>=20){
    s4 = 2;
    }
    
    if(n<=30){
    d3 = n-20;
    }
    else if(n>=30){
    d3 = 10;
    }
    
    if(n<=36){
    p4 = n-30;
    }
    else if(n>=36){
    p4 = 6;
    }
    
    if(n<=38){
    s5 = n-36;
    }
    else if(n>=38){
    s5 = 2;
    }
    
    if(n<=48){
    d4 = n-38;
    }
    else if(n>=48){
    d4 = 10;
    }
    
    if(n<=54){
    p5 = n-48;
    }
    else if(n>=54){
    p5 = 6;
    }
    
    if(n<=56){
    s6 = n-54;
    }
    else if(n>=56){
    s6 = 2;
    }
    
    if(n<=70){
    f4 = n-56;
    }
    else if(n>=70){
    f4 = 14;
    }
    
    if(n<=80){
    d5 = n-70;
    }
    else if(n>=80){
    d5 = 10;
    }
    
    if(n<=86){
    p6 = n-80;
    }
    else if(n>=86){
    p6 = 6;
    }
    
    if(n<=88){
    s7 = n-86;
    }
    else if(n>=88){
    s7 = 2;
    }
    
    if(n<=102){
    f5 = n-88;
    }
    else if(n>=102){
    f5 = 14;
    }
    
    if(n<=112){
    d6 = n-102;
    }
    else if(n>=112){
    d6 = 10;
    }
    
    if(n<=118){
    p7 = n-112;
    }
    else if(n>=118){
    p7 = 6;
    }


    if(d3==4 && s4==2){
    d3  ;
    s4--;
    }
    
    if(d3==9 && s4==2){
    d3  ;
    s4--;
    }
    
    if(d4==4 && s5==2){
    d4  ;
    s5--;
    }
    
    if(d4==9 && s5==2){
    d4  ;
    s5--;
    }
    
    if(d4==4 && s5==2){
    d4  ;
    s5--;
    }
    
    cout << "s1: " << s1;
    cout << "\ns2: " << s2; 
    cout << "\np2: " << p2;
    cout << "\ns3: " << s3;
    cout << "\np3: " << p3;
    cout << "\ns4: " << s4;
    cout << "\nd3: " << d3;
    cout << "\np4: " << p4;
    cout << "\ns5: " << s5;
    cout << "\nd4: " << d4;
    cout << "\np5: " << p5;
    cout << "\ns6: " << s6;
    cout << "\nF4: " << f4;
    cout << "\nd5: " << d5;
    cout << "\np6: " << p6;
    cout << "\ns7: " << s7;
    cout << "\nf5: " << f5;
    cout << "\nd6: " << d6;
    cout << "\np7: " << p7;
    
    return 0;
}

My problem with it is, when I input 57 for example, some variables are negative because code subtracts a certain number from inputted value. So I need to make those variables 0 if they are smaller than 0. I have 2 ways to do this and first is to write 19 new else if statements which is not efficient. My other idea is to use max() function but I don't know how to use it to include all 19 values and turn them to 0 at once. What do you all think I should do and how can I include multiple variables in max()?

CodePudding user response:

You can use std::max with an initializer list:

auto max_value = std::max({x, y, z});

Note that the elements in the list will be copied into the initializer list though, so if time is of the essence, you could just call it multiple times:

auto& max_element = std::max(std::max(x, y), z);

If you have many values, you may want to use a std::vector and a standard algorithm, like std::max_element:

std::vector<int> values { ... };
auto& max_element = *std::max_element(values.begin(), values.end());
  •  Tags:  
  • c
  • Related