सीखने के उद्देश्यों के लिए मैं एक सरणी को एक नई खाली सरणी में कॉपी करने की कोशिश कर रहा हूं-डुप्लिकेट को छोड़कर, मेरा तर्क यह है कि लूप के लिए नेस्टेड डुप्लिकेट की जांच करेगा और जब उसे कोई मिल जाएगा तो यह उसके माता-पिता के काउंटर को छोड़ देगा।

हालाँकि परिणामी सरणी हमेशा मूल सरणी की अंतिम संख्या होती है, जिसे N बार दोहराया जाता है।

संपादित करें: कार्यक्रम को बिना क्रमबद्ध सरणियों के साथ काम करना चाहिए और जब डुप्लिकेट लगातार नहीं होते हैं।

कृपया सहायता कीजिए

पूरा कोड:

#include <stdio.h>
int main() {
int array[10]={1,2,3,3,5,6,7,8,9,10};
int arrayB[10];
int i=0;
int j=0;
int lengthB=10;

// routine for copying array without duplicates
for (i=0;i<10;i++) {
    for(j=0;j<=i;j++){

             if (array[i]==arrayB[j]) {
             lengthB--;
             i++;                  
        }
             else{
             arrayB[j]=array[i];
             }
        }

}        
//display copied array:
printf("\n");
for(i=0;i<lengthB;i++)
printf("%d\t",arrayB[i]);

return 0;
}
0
NOOBAF 16 अप्रैल 2018, 08:14

1 उत्तर

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

हालाँकि परिणामी सरणी हमेशा मूल सरणी की अंतिम संख्या होती है, जिसे N बार दोहराया जाता है।

यह कोड के इस भाग के कारण है:

for(j=0;j<=i;j++){

         if (array[i]==arrayB[j]) {
         lengthB--;
         i++;                  
    }
         else{
         arrayB[j]=array[i];
         }
    }
}

जब मैं १० तक पहुँचता हूँ, तो यदि आप 'else' क्लॉज को करीब से देखते हैं, तो आप १० से १० तक इंडेक्स ० से ९ तक arrayB भरेंगे।

यह ध्यान में रखते हुए कि आपको हर बार मूल सरणी से संख्या को देखने पर j=0 से लूप करने की आवश्यकता नहीं है, और आप मूल सरणी के भीतर ही प्रतिकृति की पहचान कर सकते हैं, इसके बजाय इसे आज़माएं (आपकी दो टिप्पणियों के बीच में सब कुछ बदल देता है):

for (i=0;i<10;i++) {
  while(array[i+1] == array[i]){
    i++;
    lengthB--;
  }
  arrayB[j] = array[i];
  j++;
}   

आपके संपादन का उत्तर:

ये कोशिश करें :

for (i=0;i<10;i++) {
  isDuplicate = 0;
  for(k = 0; k<j; k++){
    if(arrayB[k] == array[i]){
      lengthB--;
      isDuplicate=1;
      break;
    } 
  }
  if(isDuplicate) continue;

  arrayB[j] = array[i];
  j++;
}   

यदि डुप्लिकेट कहीं भी हो सकते हैं, तो जब भी आप मूल सरणी से कोई नया नंबर कॉपी करते हैं, तो आपको नई सरणी की शुरुआत से डुप्लिकेट की जांच करनी होगी।

एक नया पुनरावर्तक (k) पेश किया गया था, साथ ही एक ध्वज चर (isDuplicate) भी पेश किया गया था। यह सबसे अच्छा समाधान नहीं हो सकता है, लेकिन फिर भी काम करता है।

0
wookiekim 16 अप्रैल 2018, 09:03