Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C प्रोग्राम: रिवर्स स्ट्रिंग पैटर्न

समस्या विवरण

एक स्ट्रिंग दी गई है, उसका रिवर्स पैटर्न प्रिंट करें जहां प्रत्येक पंक्ति बढ़ती लंबाई में रिवर्स ऑर्डर में वर्ण दिखाती है, और स्ट्रिंग समाप्त होने पर शेष स्थान '*' से भरें।

उदाहरण

इनपुट: "abcd"

a
c b
* * d

इनपुट: "tutorialspoint"

t
u t
o r i
a l t u
* * * * o
* * * * * i
* * * * * * n
* * * * * * * t

पैटर्न तर्क

  • पंक्ति 1: इंडेक्स 0 से 1 वर्ण (रिवर्स: इंडेक्स 0)
  • पंक्ति 2: इंडेक्स 0-1 से 2 वर्ण (रिवर्स: इंडेक्स 1, 0)
  • पंक्ति 3: इंडेक्स 0-2 से 3 वर्ण (रिवर्स: इंडेक्स 2, 1, 0)
  • ...
  • जब इंडेक्स ≥ स्ट्रिंग लंबाई: '*' प्रिंट करें

C प्रोग्राम

#include <stdio.h>
#include <string.h>

void reverse_pattern(char str[]) {
    int n = strlen(str);
    
    for (int i = 0; i < n; i++) {
        // वर्तमान पंक्ति के लिए प्रारंभिक इंडेक्स: त्रिकोणीय संख्या - 1
        int k = (i * (i + 1)) / 2 - 1;
        
        for (int j = 0; j <= i; j++) {
            if (k >= n - 1) {
                printf("* ");
            } else if (k >= 0) {
                printf("%c ", str[k]);
            } else {
                printf("* ");
            }
            k--;
        }
        printf("\n");
    }
}

int main() {
    char str[100];
    printf("स्ट्रिंग दर्ज करें: ");
    scanf("%99s", str);
    
    reverse_pattern(str);
    return 0;
}

नमूना आउटपुट

स्ट्रिंग दर्ज करें: abcd
a 
c b 
* * d 
* * * *

सुधारित संस्करण (बेहतर तर्क)

void reverse_pattern_v2(char str[]) {
    int n = strlen(str);
    int idx = 0;
    
    for (int row = 1; row <= n; row++) {
        // इस पंक्ति के लिए वर्ण (रिवर्स ऑर्डर में)
        for (int i = 0; i < row; i++) {
            int pos = idx + row - 1 - i;
            if (pos < n)
                printf("%c ", str[pos]);
            else
                printf("* ");
        }
        idx += row;
        printf("\n");
        
        if (idx >= n) break;
    }
}

विविधताएं

1. पूर्ण त्रिकोण (कोई * नहीं)

इनपुट: "ABCDE"
A
B A
C B A
D C B A
E D C B A

2. संख्या पैटर्न

इनपुट: "12345"
1
3 2
* * 4
* * * * 5

3. वैकल्पिक दिशा

// पंक्ति 1: फॉरवर्ड, पंक्ति 2: रिवर्स, पंक्ति 3: फॉरवर्ड...
for (int row = 1; row <= n; row++) {
    if (row % 2 == 1) {
        // फॉरवर्ड
        for (int i = 0; i < row; i++) ...
    } else {
        // रिवर्स
        for (int i = row-1; i >= 0; i--) ...
    }
}

जटिलता

  • समय: O(n²) जहां n = स्ट्रिंग लंबाई
  • स्थान: O(1) अतिरिक्त
  1. C में नंबर पैटर्न प्रिंट करने का प्रोग्राम C में नंबर पैटर्न प्रिंट करने का प्रोग्राम

    प्रोग्राम विवरण एक न्यूमेरिकल पैटर्न संख्याओं का एक क्रम है जिसे एक नियम के आधार पर बनाया गया है जिसे पैटर्न नियम कहा जाता है। पैटर्न नियम क्रम में लगातार संख्याओं के बीच संबंध का वर्णन करने के लिए एक या अधिक गणितीय संक्रियाओं का उपयोग कर सकते हैं। पैटर्न 1 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 पैट

  1. C प्रोग्राम: षट्कोणीय पैटर्न प्रिंट करना C प्रोग्राम: षट्कोणीय पैटर्न प्रिंट करना

    षट्कोणीय पैटर्न दिए गए पूर्णांक n के लिए, हम तारक (*) का उपयोग करके एक षट्कोणीय पैटर्न प्रिंट करते हैं। पैटर्न तीन भागों में विभाजित होता है: ऊपरी भाग - त्रिकोणीय शीर्ष मध्य भाग - समानांतर भुजाएं निचला भाग - त्रिकोणीय तल उदाहरण इनपुट: n = 5 * * * * * * * * * * * *

  1. C प्रोग्राम में मैट्रिक्स में विकर्ण पैटर्न में संख्याएं प्रिंट करना C प्रोग्राम में मैट्रिक्स में विकर्ण पैटर्न में संख्याएं प्रिंट करना

    कार्य n x n मैट्रिक्स को विकर्ण पैटर्न में प्रिंट करना है। यदि n 3 है तो विकर्ण पैटर्न में मैट्रिक्स प्रिंट करना है: इसलिए आउटपुट इस तरह होगा: उदाहरण इनपुट: 3 आउटपुट: 1 2 4 3 5 7 6 8 9 इनपुट: 4 आउटपुट: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 समस्या सुझाव देती है कि हमें एक स