int main()
{
    int num[5];
    int num2[5];
    int n;
    int j = 0;
    cout << "provide size of array" << endl;
    cin >> n;
    for(int i =0; i< n; i++){
        cin >> num[i];
    }
    cout << "the size of n is " << n << endl;
    while(n != 0){
        num2[j] = num[n-1];
        n--;
        j++;
    }
    for(int k = 0; k< 5; k++){
        cout << num2[k] << endl;
    }
}

मुझे सरणी को उलटने के लिए प्रोग्राम बनाने की ज़रूरत है, लेकिन स्वैप के बिना, मैंने यह किया है लेकिन यह एक इष्टतम तरीका है या स्वैप() का उपयोग करना इष्टतम है? स्वैप के रूप में मुझे एक और सरणी बनाने की आवश्यकता नहीं है।

0
KaranKataria77 25 पद 2021, 12:07
आपका मतलब है कि आप std::swap() का उपयोग नहीं कर सकते हैं या आप कोई स्वैप बिल्कुल नहीं कर सकते हैं?
 – 
Jellyboy
25 पद 2021, 12:12
नहीं, स्वैप() का उपयोग नहीं कर रहा है, लेकिन फिर भी स्वैप() या यह एक का उपयोग करके सबसे अच्छा तरीका है, जैसा कि आप देख सकते हैं कि मैं स्वैप() के बिना इस सरणी को उलटने में सक्षम हूं।
 – 
KaranKataria77
25 पद 2021, 12:18
1
सार्वभौमिक इष्टतम मौजूद नहीं हैं। इष्टतम हमेशा संदर्भ या संदर्भ के फ्रेम के लिए अपेक्षाकृत होता है। अक्सर सबसे इष्टतम कंटेनर को उल्टा नहीं करना है, बल्कि इसे विपरीत दिशा में फिर से चालू करना है।
 – 
Öö Tiib
25 पद 2021, 12:20
1
क्या इससे आपके सवाल का जवाब मिलता है? C++ रिवर्स ऐरे
 – 
Mostafa Ezzat
25 पद 2021, 12:29
धन्यवाद @ ÖöTiib मुझे आपकी बात समझ में आई।
 – 
KaranKataria77
25 पद 2021, 12:33

2 जवाब

सबसे बढ़िया उत्तर

यदि आप स्वैप का उपयोग नहीं कर सकते हैं, तो आप इसके बजाय जोड़ और घटाव का उपयोग कर सकते हैं

#include <array>
#include <iostream>

void reverse( int* arr, unsigned n ) {
    if ( n==0 ) return;
    unsigned i=0;
    unsigned j=n-1;
    for ( ; i<j; i++,j-- ) {
        arr[i] = arr[i] + arr[j];
        arr[j] = arr[i] - arr[j];
        arr[i] = arr[i] - arr[j];
    }
}

int main() {
    std::array<int,5> values{1,2,3,4,5};
    reverse( &values[0], values.size() );
    for ( int val : values ) {
        std::cout << val << " ";
    }
    return 0;
}

कोड: https://godbolt.org/z/MrW8cEzPs

नतीजा:

Program returned: 0
Program stdout

5 4 3 2 1 
0
Jellyboy 25 पद 2021, 12:27
1
धन्यवाद मुझे यह मिल गया।
 – 
KaranKataria77
25 पद 2021, 12:34

मैं एल्गोरिदम गहराई पहली खोज का उपयोग करके आपकी समस्या का समाधान प्रस्तुत कर सकता हूं।

#include <iostream>
#include <vector>
void showContentVector(std::vector<int>& input)
{
    for(int i=0; i<input.size(); ++i)
    {
        std::cout<<input[i]<<", ";
    }
    return;
}
void dfs(int current, int previous, std::vector<int>& input, std::vector<int>& visited)
{
    if(visited[current]==1)
    {
        return;
    }
    visited[current]=1;
    int item=input[current];
    for(int next=(current+1); next<input.size(); ++next)
    {
        if(next==previous)
        {
            continue;
        }
        dfs(next, current, input, visited);
    }
    if(current==input.size()-1)
    {
        input.clear();
    }
    input.push_back(item);
    return;
}
void solve()
{
    const int maximumSize=5;
    std::vector<int> values={1, 2, 3, 4, 5};
    std::vector<int> visited(maximumSize, 0);
    std::cout<<"Before, values <- ";
    showContentVector(values);
    dfs(0, -1, values, visited);
    std::cout<<std::endl<<"After, values <- ";
    showContentVector(values);
    std::cout<<std::endl;
    return;
}
int main()
{
    solve();
    return 0;
}

यहाँ परिणाम है:

Before, values <- 1, 2, 3, 4, 5, 
After, values <- 5, 4, 3, 2, 1, 
0
Vadim Chernetsov 25 पद 2021, 14:51