+ እና - ኦፕሬተሮችን ከያዘ ከአልጄብራ ሕብረቁምፊ ቅንፎችን ያስወግዱ


የችግር ደረጃ መካከለኛ
ውስጥ በተደጋጋሚ ተጠየቀ የ Adobe አማዞን አራት ኪይትስ
ክምር ሕብረቁምፊ

የችግሩ መግለጫ

ተሰጥተዎታል ሀ ክር የ ‹ቅንፍ› ን የሂሳብ አጻጻፍ ከቅንፍ ጋር ይወክላል። ችግሩ “+ እና - ኦፕሬተሮችን ከያዘው ከአልጄብራ ሕብረቁምፊ ቅንፎችን ያስወግዱ” የተሰጠውን አገላለጽ ቀለል ለማድረግ የሚያስችል ተግባር እንድንፈጥር ይጠይቀናል።

ለምሳሌ

+ እና - ኦፕሬተሮችን ከያዘ ከአልጄብራ ሕብረቁምፊ ቅንፎችን ያስወግዱ

s = "a-(b+c)"
a-b-c
 s = a-(b-c-(d+e))-f
a-b+c+d+e-f

+ እና - ኦፕሬተሮችን ከያዘ ከአልጄብራ ሕብረቁምፊ ቅንፎችን ለማስወገድ አልጎሪዝም

  1. ከቅንፍ ጋር የሂሳብ ስሌት መግለጫን የሚወክል የ n መጠን ሕብረቁምፊን ያስጀምሩ።
  2. ውጤቱን ለማከማቸት ሌላ ሕብረቁምፊ ይፍጠሩ. የኢንቲጀር ተለዋዋጭን ያስጀምሩ መረጃ ጠቋሚ እንደ 0 እና የቁጥር የውሂብ አወቃቀር ዓይነት እና በውስጡ 0 ን ግፋ / አስገባ ፡፡
  3. ከዚያ በኋላ በተሰጠው በኩል ይጓዙ ሕብረቁምፊ. አሁን ባለው መረጃ ጠቋሚ ላይ ያለው ቁምፊ ከ '+' ጋር እኩል መሆኑን ያረጋግጡ። እና በቁልል አናት ላይ ያለው ንጥረ ነገር 1 መሆኑን ያረጋግጡ ፣ የውጤት ሕብረቁምፊውን በመረጃ ጠቋሚ + 1 ላይ እንደ '-' ያዘምኑ ፣ አለበለዚያ በመቆለፊያው አናት ላይ ያለው ንጥረ ነገር ከ 0 ጋር እኩል ከሆነ የውጤት ሕብረቁምፊውን በመረጃ ጠቋሚ + 1 ላይ ያዘምኑ '+'።
  4. ካልሆነ በተጠቀሰው ገመድ ውስጥ ባለው የአሁኑ መረጃ ጠቋሚ ላይ ያለው ቁምፊ ከ ‹-› ጋር እኩል ከሆነ ፣ በቁልል አናት ላይ ያለው ንጥረ ነገር ከ 1 ጋር እኩል መሆኑን ያረጋግጡ ፣ የውጤት ሕብረቁምፊውን በመረጃ ጠቋሚ + 1 ላይ እንደ ‘+’ ሌላ ያሻሽሉ በደረጃው አናት ላይ ከ 0 ጋር እኩል ነው ፣ የውጤት ሕብረቁምፊውን በመረጃ ጠቋሚ + 1 ላይ እንደ '-' ያዘምኑ።
  5. በተመሳሳይ በተጠቀሰው ገመድ ውስጥ ባለው የአሁኑ መረጃ ጠቋሚ ላይ ያለው ቁምፊ ከ '(' ጋር) መሆኑን ያረጋግጡ እና የወቅቱ መረጃ ጠቋሚ ከ 0 ይበልጣል ፣ አሁን ባለው መረጃ ጠቋሚ ላይ ያለው ቁምፊ - 1 በተጠቀሰው ገመድ ውስጥ ከ '-' ፣ በቁጥር አናት ላይ ያለው ንጥረ ነገር ከሌላው 0 ጋር እኩል ከሆነ የኢቲጀር ተለዋዋጭ ይፍጠሩ እና እንደ 1 ያዘምኑ 0. ካልሆነ አሁን ባለው መረጃ ጠቋሚ ላይ ያለው ቁምፊ - 1 በተሰጠው ገመድ ውስጥ ካለው '+' ጋር እኩል ከሆነ አባሉን በ በተደራራቢው ራሱ ላይ የተቆለለው አናት ፡፡
  6. ከዚያ በኋላ ፣ በተጠቀሰው ገመድ ውስጥ ባለው የአሁኑ ማውጫ ላይ ያለው ቁምፊ ከ ‹)› ጋር እኩል መሆኑን ያረጋግጡ ፣ በተደራራቢው አናት ላይ ያለውን ንጥረ ነገር ብቅ ይበሉ ፡፡
  7. በተሰጠው ሕብረቁምፊ ውስጥ ባለው የአሁኑ መረጃ ጠቋሚ ላይ እንደ ‹ጠቋሚ + 1› ላይ የውጤት ሕብረቁምፊን ያዘምኑ።

ኮድ

+ እና - ኦፕሬተሮችን ከያዘ የአልጄብራ ገመድ ላይ ቅንፎችን ለማስወገድ የ C ++ ፕሮግራም

#include <bits/stdc++.h> 
using namespace std; 
  
char* simplify(string s){ 
    int n = s.length(); 
  
    char* res = new char(n); 
    int index = 0, i = 0; 
  
    stack<int> st; 
    st.push(0); 
  
    while(i < n){ 
        if(s[i] == '+'){ 
            
            if(st.top() == 1){ 
                res[index++] = '-';
            }
            
            if(st.top() == 0){ 
                res[index++] = '+'; 
            }
        } 
        
        else if(s[i] == '-'){ 
            
            if(st.top() == 1){ 
                res[index++] = '+';
            }
            
            else if(st.top() == 0){ 
                res[index++] = '-';
            }
        } 
        
        else if(s[i] == '(' && i > 0){ 
            
            if(s[i - 1] == '-'){ 
                int x = (st.top() == 1) ? 0 : 1; 
                st.push(x); 
            } 
  
            else if(s[i - 1] == '+'){ 
                st.push(st.top()); 
            }
        } 
  
        else if(s[i] == ')'){ 
            st.pop(); 
        }
  
        else{
            res[index++] = s[i];
        }
        i++; 
    } 
    return res; 
} 
  
int main(){ 
    string s = "a-(b+c)"; 
    cout << simplify(s) << endl; 
    return 0; 
}
a-b-c

የ + እና - ኦፕሬተሮችን ከያዘ ከአልጄብራ ሕብረቁምፊ ቅንፎችን ለማስወገድ የጃቫ ፕሮግራም

import java.util.*; 

class SimplifyExp{  
  
    static String simplify(String s){  
        int n = s.length();  
      
        char res[] = new char[n];  
        int index = 0, i = 0;  
      
        Stack<Integer> st = new Stack<Integer> ();  
        st.push(0);  
      
        while(i < n){  
            if(s.charAt(i) == '+'){  
      
                if(st.peek() == 1){  
                    res[index++] = '-';
                }
      
                if(st.peek() == 0){  
                    res[index++] = '+';
                }
            } 
            
            else if(s.charAt(i) == '-'){  
                
                if(st.peek() == 1){  
                    res[index++] = '+';
                }
                
                else if(st.peek() == 0){  
                    res[index++] = '-'; 
                }
            } 
            
            else if(s.charAt(i) == '(' && i > 0){
                
                if(s.charAt(i - 1) == '-'){  
                    int x = (st.peek() == 1) ? 0 : 1;  
                    st.push(x);  
                }  
      
                else if(s.charAt(i - 1) == '+'){  
                    st.push(st.peek());  
                }
            }  
      
            else if(s.charAt(i) == ')'){  
                st.pop();  
            }
      
            else{
                res[index++] = s.charAt(i);
            }
            i++;  
        }  
        return new String(res);  
    }  
      
    public static void main(String[] args){  
        String s = "a-(b+c)";  
        System.out.println(simplify(s));  
    } 
}
a-b-c

ውስብስብነት ትንተና

የጊዜ ውስብስብነት

ሆይ (n) በተጠቀሰው ገመድ ውስጥ የቁምፊዎች ብዛት የት n ነው ፡፡ በተሰጠው የግብዓት ገመድ አካላት ላይ እየተጓዝን እንደሆንን ማየት እንችላለን ፡፡ ስለዚህ የጊዜ ውስብስብነት መስመራዊ ነው።

የቦታ ውስብስብነት

ሆይ (n) ቁምፊዎችን ለማከማቸት ቦታ ስለጠቀምን ፡፡ ምርቱን ለማከማቸት አዲስ ሕብረቁምፊ ስለፈጠርን የቦታ ውስብስብነቱ እንዲሁ ቀጥተኛ ነው ፡፡