์ด ํฌ์คํ
์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ ์ ์์ต๋๋ค.
Project Euler is the site where you can find various mathematical problems
which are mostly able to be solved by using programming tools like C++, java and the other
language unlike UVA(ACM-ICPC) Problems.
You can improve your mathematical ability as well as coding skills.
Thus, I recommend you to visit "http://www.projectEuler.net" and have a nice time
solving tons of problems. :)
The below is the code which I already solved NO.32 which is relatively easier than the
latter numbers of problems.(it may harm your creativity to see below)
:)
ํ๋ก์ ํธ ์ค์ผ๋ฌ๋ C์ Java ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ํด๋ก ํ ์ ์๋ ์ํ์ ์ธ ๋ฌธ์ ๋ค์ด ๋ง์ ์ฌ์ดํธ ์
๋๋ค.
UVA๋ฌธ์ ๋ค๊ณผ๋ ๋ฌ๋ฆฌ ์ํ์ ์ธ ๋ถ๋ถ์ ์ข ๋ ํฌ์ปค์ค๋ฅผ ๋์ผ๋ฉฐ, ๊ฐ์ข
์คํฌ๋ฆฝํธ ์ธ์ด๋ ํ์ฉํ๊ณ ์์ต๋๋ค.
์ฝ๋ฉ ์คํฌ ๋ฟ๋ง ์๋๋ผ ์ํ์ ์ธ ๋ฅ๋ ฅ์ ๊ธฐ๋ฅผ ์ ์์ต๋๋ค. ๊ทธ๋์ http://www.ProjectEuler.net์
ํ๋ฒ ๊ฐ๋ณด์๊ธธ ๊ถ์ฅํฉ๋๋ค :)
์๋๋ ์ ๊ฐ ์ต๊ทผ์ ํผ ๋น๊ต์ ์ฌ์ด 32๋ฒ ๋ฌธ์ ์ ์ฝ๋ ์
๋๋ค. (์คํฌ์ผ๋ฌ์ฑ)
#include <cstdio>
#include <iostream>
#include <string>
#include <set>
//#include <vector>
//#include <algorithm>
using namespace std;
set< int > setInteger;
string intToString(int nInput);
//string ํ์ ๋ฐ์์ panDigit์ด ๋์๋์ง ์๋์ง ํ์ธ
bool isPanDigit(string x, string y, string strResult);
int main()
{
int i,j;
//์ ๋ต ์ ์ฅ
int nResult = 0;
for( i = 1 ; i <= 100 ;i++ )
{
for( j = 1 ; j <= 10000 ;j++ )
{
// i j i*j
if(isPanDigit(intToString(i), intToString(j), intToString(i*j) ) )
{
cout << "panDigit ๋ฐ๊ฒฌ : " << i << " X " << j << " = " << i*j << endl;
setInteger.insert(i*j);
}
}
}
//for(i = 0 ; i < setInteger.size() ; i++)
for( set< int > :: iterator it = setInteger.begin() ; it != setInteger.end() ;it++ )
{
nResult += (*it);
}
cout << "์ค๋ณต์์ ์ ๊ฑฐํ ์ ๋ต : " << nResult << endl;
return 0;
}
//int -> string
string intToString(int nInput)
{
// int ๋ฅผ string ์ผ๋ก ๋ฐ๊พธ๊ธฐ ์์
char szBuf[512];
sprintf(szBuf,"%d",nInput);
string strTemp(szBuf);
return strTemp;
// int ๋ฅผ string ์ผ๋ก ๋ฐ๊พธ๊ธฐ ๋.
}
//string ํ์ ๋ฐ์์ panDigit์ด ๋์๋์ง ์๋์ง ํ์ธ
bool isPanDigit(string x, string y, string strResult)
{
int i;
bool bPanDigit[10] = {false};
// ex) X * Y = result ์ผ๋ X์ ๋ฌธ์๊ธธ์ด ๋งํผ ๊ตฌํํ..
for(i = 0 ; i < x.size() ; i++)
{
if(bPanDigit[ x[i]-'0' ]== true)
{
return false;
}
bPanDigit[ x[i]-'0' ] = true;
}
for(i = 0 ; i < y.size() ; i++)
{
if(bPanDigit[ y[i]-'0' ]== true)
{
return false;
}
bPanDigit[ y[i]-'0' ] = true;
}
for(i = 0 ; i < strResult.size() ; i++)
{
if(bPanDigit[ strResult[i]-'0' ]== true)
{
return false;
}
bPanDigit[ strResult[i]-'0' ] = true;
}
//๋ชจ๋ ๋ฐฐ์ด์ด true์ด๋ฉด true ํ๋๋ผ๋ false ์ด๋ฉด false
if(bPanDigit[0] == true)
{
return false;
}
for(i = 1 ; i < 10 ; i++)
{
if( bPanDigit[i] == false )
{
return false;
}
}
return true;
//
}
|