රෝම ලීට්කෝඩ් විසඳුමට අනුකලනය


දුෂ්කරතා මට්ටම මධ්යම
නිතර අසනු ලැබේ ඇෙබෝ ඇමේසන් Apple ජංගම දුරකථන කළු ගල් බ්ලූම්බර්ග් ඡ්මඥපදධබඥ ෆේස්බුක් ගූගල් LinkedIn මයික්රොසොෆ්ට් ඔරකල් ට්විටර් යාහූ
ගණිතය String

මෙම ගැටළුවේදී, අපට පූර්ණ සංඛ්‍යාවක් ලබා දී ඇති අතර රෝම ඉලක්කම් බවට පරිවර්තනය කිරීම අවශ්‍ය වේ. මේ අනුව ගැටළුව සාමාන්‍යයෙන් “රෝමයට පූර්ණ සංඛ්‍යාවක්” ලෙස හැඳින්වෙන අතර මෙය රෝමානු ලීට්කෝඩ් විසඳුමට පූර්ණ සංඛ්‍යාවක් වේ. යමෙකු රෝම ඉලක්කම් ගැන නොදන්නේ නම්. පැරණි කාලවලදී, මෑත කාලයේ අප භාවිතා කළ පරිදි මිනිසුන් පූර්ණ සංඛ්‍යා භාවිතා නොකළේය.

රෝම ඉලක්කම් සාමාන්‍යයෙන් වමේ සිට දකුණට අඩු අනුපිළිවෙලින් ලියා ඇත, නමුත් මේ සඳහා සමහර ව්‍යතිරේක ඇත. සමහර ඉලක්කම් ඊළඟ සංඛ්‍යාවට වඩා කුඩා නම් අපි වත්මන් සංඛ්‍යා ධන එකතුවෙන් අඩු කරමු. සාමාන්‍ය නියමය නම් එකම සංඛ්‍යා 3 වතාවකට වඩා නැවත නොකිරීමයි. පූර්ණ සංඛ්‍යා රෝම සංඛ්‍යා පරිවර්තනය සඳහා යමෙකු පහත රූපය පරීක්ෂා කළ යුතුය.

රෝම ලීට්කෝඩ් විසඳුමට අනුකලනය

3
III

පැහැදිලි කිරීම: මම 1 ට සමාන බැවින්, එකතුව = 3 ලබා ගැනීම සඳහා අපි එය තුන් වරක් පුනරාවර්තනය කරමු.

4
IV

පැහැදිලි කිරීම: අපට 4 වතාවක් පුනරාවර්තනය කළ නොහැක, මන්ද අපට 3 වතාවකට වඩා පුනරාවර්තනය කළ නොහැක. එබැවින් අපි V ට පෙර I යානයක් ගුවන් ගත කරමි. මම V ට වඩා අඩු බැවින් 1 ක් 5 ට සමාන වන සමස්තයෙන් අඩු කරනු ලැබේ. මේ අනුව මුළු එකතුව 4 ට සමාන වේ.

රෝම ලීට්කෝඩ් විසඳුමට අනුකලනය සඳහා ප්‍රවේශය

“රෝමයට අනුකලනය” යන ගැටලුව කෑදරකමින් විසඳා ගත හැකි අතර එහිදී අපි මුලින්ම එම සංඛ්‍යාව හැකි උපරිම සංඛ්‍යාවක් බවට පරිවර්තනය කිරීමට උත්සාහ කරමු. ගැටලුවට තිරිසන් බලවේග ප්‍රවේශය කළ නොහැක්කේ එය කළ හැකි හෝ පොදුවේ අදාළ නොවන බැවිනි. මේ ආකාරයට අපි රෝම ඉලක්කම්වල කුඩා නිකායන් කරා ගමන් කරමු. නමුත් අපි 4 පරිවර්තනය කිරීමට උත්සාහ කරන විට මෙම ප්‍රවේශය අසාර්ථක වනු ඇත. මෙම ප්‍රවේශය I 4 වතාවක් මුද්‍රණය කරයි. එබැවින්, අපට මෙය මඟහරවා ගැනීමට ක්‍රමයක් සොයාගත යුතුය.

හොඳයි, අප සමීපව බැලුවහොත් අපට මෙම ව්‍යතිරේකය තුළට දිව යා හැකි විට ගණනය කළ හැකි ක්‍රම කිහිපයක් තිබේ. මෙම ව්‍යතිරේකය සිදුවන්නේ අප සංඛ්‍යා 3 වතාවකට වඩා පුනරාවර්තනය කළ විට පමණි. එබැවින් ව්‍යතිරේකයට වැටිය හැකි පූර්ණ සංඛ්‍යා ලිවීමට ක්‍රම සොයා ගැනීමට උත්සාහ කරන්න. ව්‍යතිරේකය පිළිවෙලින් 4, 9, 40, 90, 400, 900 වන අතර ඒවා පිළිවෙලින් IV, IX, XL, XC, CD, CM බවට පරිවර්තනය කළ හැකිය.

ව්‍යතිරේකයන් සමඟ කටයුතු කිරීම

ඉතින්, මේ වන තෙක් අපි සිතුවේ දී ඇති නිඛිලය පවතින මුල් තනි අක්ෂර රෝම ඉලක්කම් බවට පරිවර්තනය කිරීමට ය. නමුත් ව්‍යතිරේකය මඟහරවා ගැනීම සඳහා අපි ඒවා වෙන වෙනම හසුරුවන්නෙමු. මේ අනුව, අපි දෙකක් නිර්මාණය කරමු අරා එක් එක් රෝම ඉලක්කම් වලට අනුරූප වන අනුකලනය අගය ගබඩා කරන. අනෙක් අරාව රෝම ඉලක්කම් ගබඩා කරයි. මෙම අරා දෙකම පූර්ණ සංඛ්‍යා හා රෝමන් අංක එකම අනුරූප දර්ශකවල ගබඩා කරයි.

දැන් අපට ඉතිරිව ඇත්තේ ගිජු ලෙස පරිවර්තනය කිරීම පමණි. විශාලතම රෝම ඉලක්කම් වලින් ආරම්භ කරන්න, එම සංඛ්‍යාව වත්මන් රෝමානු ඉලක්කම් වලට වඩා වැඩි නම්. රෝමන් ඉලක්කම් පිළිතුරකට එකතු කරන්න පේළියකි ලබා දී ඇති පූර්ණ සංඛ්‍යාවෙන් අනුකලනය අඩු කරන්න. දී ඇති නිඛිලය වත්මන් සංඛ්‍යාවට වඩා වැඩි වන තුරු වත්මන් අංකය අඩු කරන්න. වත්මන් සංඛ්‍යාව වත්මන් නිඛිල අගයට වඩා කුඩා වන විට ඔබ යම් ස්ථානයකට ළඟා වූ පසු. ඊළඟ කුඩා රෝම ඉලක්කම් සඳහා සරලව පරීක්ෂා කරන්න. සියලුම රෝම ඉලක්කම් සමඟ අප අවසන් වූ පසු, අපි පිළිතුර නැවත ලබා දෙන්නෙමු.

රෝමානු ලීට්කෝඩ් විසඳුමට අනුකලනය සඳහා කේතය

රෝම ලීට්කෝඩ් විසඳුමට අනුකලනය සඳහා සී ++ කේතය

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

string intToRoman(int num) {
    vector<string> romans({"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"});
    vector<int> value({1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000});
    int seqSize = romans.size();
    int idx = seqSize - 1;
    string ans = "";
    while(num>0){
        while(value[idx]<=num){
            ans += romans[idx];
            num -= value[idx];
        }
        idx--;
    }
    return ans;
}

int main(){
    cout<<intToRoman(4);
}
IV

රෝමානු ලීට්කෝඩ් විසඳුමට අනුකලනය සඳහා ජාවා කේතය

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static String intToRoman(int num) {
        String romans[] = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
        int value[] = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
        int seqSize = romans.length;
        int idx = seqSize - 1;
        String ans = "";
        while(num>0){
            while(value[idx]<=num){
                ans += romans[idx];
                num -= value[idx];
            }
            idx--;
        }
        return ans;
    }
    public static void main(String[] args){
    	System.out.println(intToRoman(4));
    }
}

 

IV

සංකීර්ණ විශ්ලේෂණය

කාල සංකීර්ණත්වය

ඕ (1), ප්‍රති result ලය සෙවීම සඳහා අපි නිරන්තර පියවර ගණනක් භාවිතා කරන බැවිනි.

අභ්‍යවකාශ සංකීර්ණතාව

ඕ (1), අප විසින් ගබඩා කර ඇත්තේ නියත විචල්‍ය සංඛ්‍යාවක් පමණක් වන අතර අප භාවිතා කළ අරා වල නියත ප්‍රමාණයද ඇත.