#include <stdio.h>
int main() {
  int x[100], y[100], i, j, dim1, dim2, subsir=0;
  scanf("%d", &dim1);
  for(i=0; i<dim1; i++)
  {
      scanf("%d", &x[i]);
  }
  scanf("%d", &dim2);
  for(j=0; j<dim2; j++)
  {
      scanf("%d", &y[j]);
  }
  if(dim1<dim2)
  {
      printf("no");
      return 0;
  }
  for(i=0; i<dim1; i++)
    for(j=0; j<dim2; j++)
        {
        if(x[i]==y[j])
            subsir=1;
        }


  if(subsir==1)
  {
      printf("yes");
  }
  else
  {
      printf("no");
  }

  return 0;
}

पूर्णांकों के दो तारों पर विचार करें। जांचें कि क्या दूसरी स्ट्रिंग सी में पहले की एक सबस्ट्रिंग है (सबस्ट्रिंग में पहली स्ट्रिंग के लगातार तत्व होते हैं)

-2
my_name 4 सितंबर 2021, 19:10

2 जवाब

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

0 से dim1 - dim2 तक हर स्थिति को आजमाते हुए, आप एक क्रूर बल दृष्टिकोण के साथ अपने लक्ष्य को प्राप्त कर सकते हैं।

यहाँ त्रुटि जाँच के साथ एक संशोधित संस्करण है:

#include <stdio.h>

int main() {
    int x[100], y[100], i, j, dim1, dim2;

    if (scanf("%d", &dim1) != 1 || dim1 > 100)
        return 1;
    for (i = 0; i < dim1; i++) {
        if (scanf("%d", &x[i]) != 1)
            return 1;
    }
    if (scanf("%d", &dim2) != 1 || dim2 > 100)
        return 1;

    /* no need to read second array if larger */
    if (dim1 < dim2) {
        printf("no\n");
        return 0;
    }
    for (j = 0; j < dim2; j++) {
        if (scanf("%d", &y[j]) != 1)
            return 1;
    }
    /* trying every possible sub-array start in array `x` */
    for (i = 0; i <= dim1 - dim2; i++) {
        /* compare all entries */
        for (j = 0; j < dim2; j++) {
            if (x[i + j] != y[j])
                break;
        }
        /* if above loop completed, we have a match */
        if (j == dim2) {
           printf("yes\n");
           return 0;
        }
    }
    printf("no\n");
    return 0;
}
0
chqrlie 4 सितंबर 2021, 18:53

आपके दृष्टिकोण के आधार पर एक संभावित कार्यान्वयन:

// this function will return `1` in case `arr2` is contained inside `arr1`, otherwise `0`
int is_subarr(int arr1[], size_t arr1_len, int arr2[], size_t arr2_len) {
  // as you already did, we first check that arr1's len is not smaller than arr2's
  if (arr1_len < arr2_len) {
    return 0;
  }

  // useful check: in many implementations, when `arr2` is empty, they return true
  if (arr2_len == 0) {
    return 1;
  }

  // first loop: we go through all elements of `arr1` (but we stop when we have less elements left than `arr2`'s len)
  for (size_t i = 0; i < arr1_len && i < arr2_len; i += 1) {
    // temporary flag, we just pretend that `arr2` is contained, and then we check for the opposite
    int eq = 1;

    // starting with the current position `i` inside `arr1`, we start checking if `arr2` is contained
    for (size_t j = 0; j < arr2_len; j += 1) {
      // if it's not contained, we break from this inner loop, and we keep searching through `arr1`
      if (arr1[i + j] != arr2[j]) {
          eq = 0;
          break;
      }
    }

    // in case `arr2` is effectively found, we return `1`
    if (eq == 1) {
      return 1;
    }
  }

  return 0;
}

नोट: "पूर्णांकों के तार" को C में "पूर्णांकों की सरणियाँ" कहा जाता है; एक "स्ट्रिंग" इसके बजाय "वर्णों की सरणी" है।

0
Luca Polito 4 सितंबर 2021, 17:11