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

C++ में 8 से विभाज्य रोटेशन की गिनती


हमें एक बड़ी संख्या दी गई है। लक्ष्य num के उन रोटेशन की संख्या गिनना है जो 8 से विभाज्य हैं।

चूंकि रोटेशन को बार-बार नहीं किया जा सकता। हम 8 से विभाज्यता के गुणधर्म का उपयोग करेंगे। यदि अंतिम तीन अंक 8 से विभाज्य हैं तो संख्या 8 से विभाज्य है। यदि संख्या 1800 है तो इसके रोटेशन होंगे 1800, 0180, 0018, 8001 जिनमें से 1800, 8 से विभाज्य है।

उदाहरण सहित समझ

इनपुट - num=15320

आउटपुट - 8 से विभाज्य रोटेशन की संख्या: 1

व्याख्या - रोटेशन हैं:

15320, 01532, 20153, 32015, 53201
इनमें से केवल 15320, 8 से विभाज्य है।

इनपुट - num=848484

आउटपुट - 8 से विभाज्य रोटेशन की संख्या: 3

व्याख्या - रोटेशन हैं:

848484, 484848, 848484, 484848, 848484, 484848
इनमें से सभी 484848, 8 से विभाज्य हैं।

प्रोग्राम में उपयोग किया गया दृष्टिकोण

हम संख्या को स्ट्रिंग में बदलेंगे और फॉर लूप का उपयोग करके संख्या को ट्रैवर्स करेंगे। प्रत्येक तीन अंकों के जोड़े के लिए उन्हें पूर्णांक में बदलें और 8 से विभाज्यता जांचें। यदि विभाज्य है तो काउंट बढ़ाएँ।

  • संख्या को long long num के रूप में लें।
  • फंक्शन Rotation_8(long long num) संख्या num लेता है और num के उन रोटेशन की संख्या लौटाता है जो 8 से विभाज्य हैं।
  • num को स्ट्रिंग में बदलें: str = to_string(num)।
  • num में अंकों की संख्या होगी length = str.length()।
  • तीन अंकों के पूर्णांक मान संग्रहीत करने के लिए अस्थायी चर digit = 0 लें।
  • प्रारंभिक काउंट 0 लें।
  • यदि लंबाई 1 है तो केवल एक अंक मौजूद है। इसे पूर्णांक में बदलें: digit = (str.at(0) - '0')। 8 से विभाज्यता जांचें और परिणाम 1 या 0 के रूप में लौटाएँ।
  • यदि लंबाई 2 है तो केवल दो अंक मौजूद हैं। उन्हें पूर्णांक में बदलें: part_1 = (str.at(0) - '0') * 10 + (str[1] - '0') और part_2 = (str[1] - '0') * 10 + (str[0] - '0')। 8 से विभाज्यता जांचें और परिणाम 1 या 0 के रूप में लौटाएँ।
  • अन्यथा तीन या अधिक अंकों की लंबाई के लिए, फॉर लूप का उपयोग करके i=0 से i=length-1 तक स्ट्रिंग को ट्रैवर्स करें और तीन वर्णों को पूर्णांक मान में बदलें: digit = (str[i] - '0') * 100 + (str[i + 1] - '0') * 10 + (str[i + 2] - '0')। यदि digit का मान 8 से विभाज्य है तो काउंट बढ़ाएँ।
  • अंतिम अंक और पहले दो अंकों से बने जोड़े के लिए वही प्रक्रिया दोहराएँ: digit = (str[length - 1] - '0') * 100 + (str[0] - '0') * 10 + (str[1] - '0')।
  • 8 से विभाज्यता जांचें और काउंट अपडेट करें।
  • अंत में परिणाम के रूप में काउंट लौटाएँ।

उदाहरण

#include <bits/stdc++.h>
using namespace std;

int Rotation_8(long long num) {
    string str = to_string(num);
    int length = str.length();
    int digit = 0, count = 0;
    if (length == 1) {
        digit = str[0] - '0';
        if (digit % 8 == 0) {
            return 1;
        } else {
            return 0;
        }
    } else if (length == 2) {
        int part_1 = (str[0] - '0') * 10 + (str[1] - '0');
        int part_2 = (str[1] - '0') * 10 + (str[0] - '0');
        if (part_1 % 8 == 0) count++;
        if (part_2 % 8 == 0) count++;
        return count;
    } else {
        for (int i = 0; i < (length - 2); i++) {
            digit = (str[i] - '0') * 100 + (str[i + 1] - '0') * 10 + (str[i + 2] - '0');
            if (digit % 8 == 0) count++;
        }
    }
    digit = (str[length - 1] - '0') * 100 + (str[0] - '0') * 10 + (str[1] - '0');
    if (digit % 8 == 0) count++;
    digit = (str[length - 2] - '0') * 100 + (str[length - 1] - '0') * 10 + (str[0] - '0');
    if (digit % 8 == 0) count++;
    return count;
}

int main() {
    long long num = 24040;
    cout << "Count of rotations divisible by 8 are: " << Rotation_8(num);
    return 0;
}

आउटपुट

Count of rotations divisible by 8 are: 3
  1. - C++ में उन सबएरे को गिनना जिनका गुणनफल k से विभाज्य है

    एक सरणी arr[] और एक पूर्णांक k इनपुट के रूप में दिया गया है। लक्ष्य arr[] के उन सबएरे की संख्या ढूंढना है जिनके एलिमेंट्स का गुणनफल k से विभाज्य है। उदाहरण के लिए इनपुट arr[] = {2, 1, 5, 8} k=4 आउटपुट Count of sub-arrays whose product is divisible by k are: 4 व्याख्या सबएरे होंगे: [ 8 ], [ 5,8 ], [

  1. - C++ में 4 से विभाज्य रोटेशन की गिनती

    हमें एक बड़ी संख्या दी गई है। लक्ष्य num के उन रोटेशन की संख्या गिनना है जो 4 से विभाज्य हैं। चूंकि रोटेशन को बार-बार नहीं किया जा सकता। हम 4 से विभाज्यता के गुणधर्म का उपयोग करेंगे। यदि अंतिम दो अंक 4 से विभाज्य हैं तो संख्या 4 से विभाज्य है। यदि संख्या 1234 है तो इसके रोटेशन होंगे 1234, 4123, 341

  1. C++ में सॉर्टेड और रोटेटेड लिंक्ड लिस्ट में रोटेशन की गिनती C++ में सॉर्टेड और रोटेटेड लिंक्ड लिस्ट में रोटेशन की गिनती

    हमें एक लिंक्ड लिस्ट दी गई है। लिस्ट पहले सॉर्ट की गई है और फिर K नोड्स द्वारा रोटेट की गई है। लक्ष्य K का मान ज्ञात करना है। यदि हमें नीचे दी गई लिंक्ड लिस्ट इनपुट के रूप में दी गई है जो K नोड्स द्वारा रोटेटेड है: तो मूल लिस्ट रही होगी: और हम यहाँ देख सकते हैं K=2 है। इनपुट लिंक्ड लिस्ट मूल सॉर्