Wednesday, December 4, 2013

Хэсэглэл байгуулах

Ялгаатай тэмдэгтүүдээс бүрдсэн мөр(string)-ийн бүх дэд олонлог(хэсэглэл)-ийг байгуул. Гэнэт бодлого бодох хүсэл төрөв :)

Зарчим. Нийт дэд олонлогийн тоо 2^n-1 учраас 1-2^n-1 хүртэлх тоог хоёртын тооллын систем рүү n урттайгаар (хоёртын тооллын систем дэх бичлэгийн урт нь n болтол эхэнд '0' залгах) хөрвүүлээд, уг дарааллын элементүүдийн 1-тэй тэнцүү байх элементийн индексэнд харгалзах өгөгдсөн мөрийн тэмдэгтийг хэвлэх

#include <iostream>
#include <string>
#include <sstream>
#include <math.h>
using namespace std;

string NumberToString(int pNum)
{
 ostringstream converter; 
 converter << pNum; 
 return converter.str();
}

string ToBinar(long pDecNum, int pLen)
{
 string retStr = "", tmpStr;
 int d, l;
 while(pDecNum > 0)
 {
  d = pDecNum % 2;
  retStr = NumberToString(d).append(retStr);
  pDecNum /= 2;
 }
 l = retStr.length();
 for(int i=0; i<pLen - l; i++)
 {
  tmpStr = "0";
  retStr = tmpStr.append(retStr);
 }
 return retStr;
}

int main()
{
 string strInput, strBin;
 int l, lBin;
 long count = 0;
 cout<<"Input your string: ";
 cin>>strInput;
 l = strInput.length();
 count = pow(2, l);
 for(int i=1; i<count; i++)
 {
  if(i>1)
   cout<<", ";
  strBin = ToBinar(i, l);
  lBin = strBin.length();
  for(int j=0; j<lBin; j++)
  {
   if(strBin[j] == '1')
   {
    cout<<strInput[j];
   }
  }
 }
 cout<<"\n\n";
 return 0;
}

Жишээ:


2 comments:

  1. Сайн байна уу тантай холбоо барих гэсэн ямар хаягаар холбогдох вэ майл хаяг юм уу утас нь байна уу

    ReplyDelete