ចំនួនសរុបដោយគ្មានខ្ទង់ដដែលៗក្នុងជួរ  


កម្រិតលំបាក មធ្យម
សួរញឹកញាប់ គួរឱ្យគោរព រោងចក្រ MAQ
គណិតវិទ្យា លេខ - ខ្ទង់

អ្នកត្រូវបានផ្តល់លេខជួរ (ចាប់ផ្តើម, បញ្ចប់) ។ ភារកិច្ចដែលបានផ្តល់ឱ្យនិយាយថាដើម្បីរកមើលចំនួនសរុបនៃលេខដែលមិនមានលេខម្តងហើយម្តងទៀតនៅក្នុងជួរ។

ឧទាហរណ៍  

បញ្ចូល:

10 50

លទ្ធផល:

37

ការពន្យល់:

១០ មិនមានខ្ទង់ដដែលៗទេ។ ១១ មានខ្ទង់ម្តងហើយម្តងទៀត។ ១២ មិនមានខ្ទង់ម្តងហើយម្តងទៀត។ ចំណែក ២២, ៣៣ មានខ្ទង់ដដែលៗ។ ដូច្នេះនៅពេលយើងរកឃើញលេខដែលមិនមានខ្ទង់ម្តងហើយម្តងទៀតយើងនឹងរាប់វានៅក្នុងលទ្ធផលរបស់យើង។

ចំនួនសរុបដោយគ្មានខ្ទង់ដដែលៗក្នុងជួរ

ក្បួនដោះស្រាយ  

  1. ប្រកាសក កំណត់ និងវ៉ិចទ័រមួយ។
  2. រុញលេខ ០ និង ១ ចូលទៅក្នុងវ៉ិចទ័រហើយរកមើលកត្តាទាំងអស់ក្នុងរយៈពេល ១០ ហើយរក្សាទុកចំនួនដែលនៅសល់ទៅក្នុងសំណុំ។ ប្រសិនបើសំណុំមានលេខនោះត្រឡប់មកវិញ ០ ផ្សេងទៀតនឹងត្រឡប់ ១ ។
  3. យកលេខនោះហើយបញ្ចូលវាទៅក្នុងបញ្ជីឈ្មោះ វ៉ិចទ័រ.
  4. សម្រាប់រាល់សំណួរទាំងអស់សូមបង្ហាញភាពខុសគ្នានៃវ៉ិចទ័រ [បញ្ចប់] និងវ៉ិចទ័រ [ចាប់ផ្តើម] ។

ការពន្យល់សម្រាប់លេខសរុបដោយគ្មានខ្ទង់ដដែលៗនៅក្នុងជួរ  

យើងបានផ្តល់ជួរ។ យើងបានស្នើសុំរកចំនួនសរុបនៃចំនួនដែលបានមកនៅក្នុងជួរដែលបានផ្តល់ឱ្យមិនមានតួលេខម្តងហើយម្តងទៀតនៅក្នុងលេខខ្លួនឯងទេ។ សម្រាប់បញ្ហានេះយើងនឹងប្រើគ្រោងការប្រមូល។ យើងនឹងប្រើសំណុំនិងវ៉ិចទ័រ។ សំណុំគឺដើម្បីរក្សាទុកកត្តាមិនធម្មតាឬចំនួននៅសល់និងវ៉ិចទ័រគឺត្រូវទុកលេខដែលបានច្រោះចេញពីសំណុំ។ យើងដឹងហើយថាក្នុងចំណោមពួកគេមានតែមួយចំនួនប៉ុណ្ណោះនៅក្នុងខ្ទង់ ១០ ខ្ទង់ណាមួយមិនត្រូវបានធ្វើម្តងទៀតទេដូចជាពីលេខ ១ ដល់លេខ ១០ មិនមានលេខដដែលទេ។ ចាប់ពីលេខ ១១ ដល់លេខ ១០ និងលេខ ២១ ដល់ ៣០ មានពីរលេខដែលមានខ្ទង់ដដែលៗដូចលេខ ១១ និង ២២ ដែលលេខនេះគឺដូចគ្នា។

សូម​មើល​ផង​ដែរ
រាប់ចំនួនផលិតផលដែលមាននៅក្នុងអារេ

យើងនឹងបន្ថែមលេខ ០ និងលេខ ១ ទៅវ៉ិចទ័រចាប់ពីតម្លៃ ២ ដល់តម្លៃដែលបានផ្តល់ទោះបីវាអាចជាអ្វីក៏ដោយ។ យកលេខដែលមានកត្តារឺនៅសល់ក្នុងលក្ខខណ្ឌ ១០ ដូចបានរៀបរាប់ខាងលើ។ យើងនឹងទទួលបានអ្នកដែលនៅសល់ហើយបន្ថែមទៅក្នុងសំណុំប្រសិនបើសំណុំមានលេខនោះរួចហើយជាចំនួននៅសល់។ ត្រឡប់ ០ ផ្សេងទៀតបន្ថែមចំនួនដែលនៅសល់ទៅក្នុងសំណុំ។ ដូចដែលវានឹងជាលេខថ្មីឬនៅសល់ហើយត្រលប់មកវិញ 0. បន្តឆ្លងកាត់រហូតទាល់តែតម្លៃក្លាយជាលេខ ០ ។ នៅទីនេះយើងនឹងទទួលបានលេខពីលេខ ០ ឬលេខ ១ ហើយបន្ថែមវាជាមួយលេខដែលប្រមូលវាតាមរយៈវ៉ិចទ័រហើយរុញចំនួន ទៅវ៉ិចទ័រខ្លួនវាផ្ទាល់។

ចំពោះសំណួរនីមួយៗផ្តល់ឱ្យយើងនឹងត្រលប់មកវិញនូវភាពខុសគ្នានៃលេខនៅទីតាំងខាងស្តាំដែលមានន័យថាជួរខាងស្តាំហើយលេខនៅទីតាំងខាងឆ្វេងមានន័យថាលេខនៅជួរខាងឆ្វេងក្នុងវ៉ិចទ័រ។ យើងនឹងត្រឡប់ភាពខុសគ្នានេះយើងនឹងក្លាយជាចម្លើយដែលត្រូវការ។

ការអនុវត្តន៍  

កម្មវិធី C ++ សម្រាប់ចំនួនសរុបដោយមិនមានលេខដដែលៗនៅក្នុងជួរ

#include <iostream>
#include<vector>
#include<unordered_set>

using namespace std;

int MAX = 1000;

vector<int> numbers = {0};

int getRepeatedNumber(int n)
{

    unordered_set<int> SET;
    int rem;

    while (n != 0)
    {
        rem = n % 10;
        if (SET.find(rem) != SET.end())
            return 0;

        SET.insert(rem);
        n = n / 10;
    }
    return 1;
}

void buildSetOfNumbers(int MAX)
{

    numbers.push_back(getRepeatedNumber(1));

    for (int i = 2; i < MAX + 1; i++)
        numbers.push_back(getRepeatedNumber(i) + numbers[i-1]);
}

int getNumber(int left,int right)
{
    return numbers[right] - numbers[left-1];
}
int main()
{
    int Left = 10, Right = 50;
    buildSetOfNumbers(MAX);

    cout << getNumber(Left, Right) << endl;

    return 0;
}
37

កម្មវិធីចាវ៉ាសម្រាប់ចំនួនសរុបដោយគ្មានខ្ទង់ដដែលៗក្នុងជួរ

import java.util.Vector;
import java.util.HashSet;

class repeatedDigits
{
    private static int MAX = 100;
    private static Vector<Integer> numbers = new Vector<>();
    
    static int getRepeatedNumber(int n)
    {
        HashSet<Integer> set = new HashSet<>();
        int rem;

        while (n != 0)
        {
            rem = n % 10;

            if (set.contains(rem))
                return 0;

            set.add(rem);
            n /= 10;
        }
        return 1;
    }
    
    static void buildSetOfNumbers()
    {
        numbers.add(0);
        numbers.add(getRepeatedNumber(1));

        for (int i = 2; i < MAX + 1; i++)
            numbers.add(getRepeatedNumber(i) + numbers.elementAt(i - 1));
    }
    
    static int getNumber(int left, int right)
    {
        return numbers.elementAt(right) - numbers.elementAt(left - 1);
    }
    
    public static void main(String[] args)
    {
        int Left = 10, Right = 50;

        buildSetOfNumbers();
        System.out.println(getNumber(Left, Right));
    }
}
37

ការវិភាគស្មុគស្មាញ  

ស្មុគស្មាញពេលវេលា

ឱ (១) ដូចជាមិនត្រូវការពេលវេលាបន្ថែមទេ។

សូម​មើល​ផង​ដែរ
Subarray ផលិតផលអតិបរមា

ភាពស្មុគស្មាញនៃលំហ

អូរ (n) ដែលជាកន្លែងដែល “ n” គឺជាចំនួនធាតុក្នុងអារេ។