반응형

언어 자료구조 알고리즘 1251

정보 올림피아드

1. 다음은 일정한 규칙에 따라 수를 늘어놓은 것이다. 빈칸에 가장 알맞은 수는? 1 , 3 , 6 , 11 , 19 , 31 , 48 , ( ) ①65②68③71④74⑤77 2. A, B, C, D, E가 각각 0~9 까지 숫자 중에 하나이고 다른 알파벳은 다른 숫자를 나타낸다. 다음 식을 만족하는 D의 값은? A B × B A A B B C E D B ①0②1③2④3⑤4 3. 1을 7로 나누었을 때 소수점 이하 97번째 자리 수는 다음 중 어떤 것인가? ①1②2③4④5⑤7 4. A◎B는 A를 B로 나눈 몫이고 A⋆B는 A를 B로 나눈 나머지이다. (A◎3)⋆10 = 3일 때 A가 될 수 있는 두 자리 자연수의 개수는? ①8개②9개③10개④11개⑤12개 5. 미국 돈 40 달러는 싱가포르 돈 32 달러..

중복되지 않게 랜덤한 카드 발생

프로그래밍을 하다보면 중복을 하지 않으면서 랜덤을 발생해야 하는 문제들이 있다. 하나의 예로 카드를 섞어 보기로 하자. #include #include #include #define MAX_CARD_TYPE 4 #define MAX_CARD_NUM 13 const char *ctypes[MAX_CARD_TYPE]={"♠","♥","♣","◆"}; const char *ntypes[MAX_CARD_NUM]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; int RandCard(int base[][13]); void PrintCard(int lcnt,int ct,int cn); void main() { int arr[MAX_CARD_TYPE][MAX_CAR..

적분 공식을 이용한 Sin(x)함수 만들기

sin(x)를 구하는 적분 공식은 다음과 같다. sin(x) = x - x^3/3! + x^5/5! - x^7/7! + x^9/9! ... 여기서 x는 각도를 얘기하는 것이 아니라 라디안을 얘기를 한다. math.h에서 제공하는 sin()함수도 라디안을 입력 값을 갖는다. 이를 사용할 때 sin(90);과 같이 사용하는 것이 아니라 sin(90/PI);로 사용해야 한다. 암튼, 적분 공식을 이용해서 각도를 입력 매개변수를 받는 함수를 만들어 보자. #include #include double Fac(int n); double SignAngle(int angle) { int i; double rad = (angle%180)/180.0; double mul=0; int sign = 1; for(i=1 ; i

간단하게 Random함수 만들기

먼저 3.2GHz컴퓨터다라는 말을 많이 들었을 것입니다. 여기서 3.2GHz라는 말은 CPU클럭이 1초에 3.2 * 1,000,000,000 번 발생한다는 것입니다. 즉, CPU의 연산 처리 속도와 관련이 있다는 것이구요. BOOL QueryPerfomanceOunter(LPLARGE_INTERGER *pli);는 발생한 클럭 수를 얻어오는 interface입니다. 이를 이용해서 간단히 Random을 만들 수 있습니다. 물론, spirit한 정도가 균등하면서 동시에 Random한 좋은 Random이라고 할 수 없겠지만 굉장히 좋은 Random함수가 필요한 것이 아니라면 큰 문제가 되지 않을 것입니다. 물론, 있는 거 걍 사용하는 게 더 낫겠지만... #include #pragma warning (disa..

재귀함수 형상화

//아래의 코드를 main함수에서 호출하는 부분을 박스로 타고 들어가는 모습을 형상화해 보았습니다. //유심히 보시고 재귀함수의 원리를 이해하는데 도움이 되었으면 합니다. #include void move(int from, int to) { printf("%d %d\n", from, to); } void A(int n, int from, int by, int to) { if(n==1) move(from, to);// move1 else { A(n-1, from, to, by); // A1 move(from, to); // move2 A(n-1, by, from, to); // A2 } } void main() { A(3,1,2,3); } //형상화 부분 void main() { A(3,1,2,3); in..

한글 초성 알아내기

한글 초성 알아내기 원리는 다음과 같습니다. (지식iN질문 답변하다가 만들어 봤습니다.) 입력 문자열이 "가"보다 크거나 같고 "나"보다 작으면 초성은 "ㄱ" 입력 문자열이 "나"보다 크거나 같고 "나"보다 작으면 초성은 "ㄴ" 입력 문자열이 "다"보다 크거나 같고 "나"보다 작으면 초성은 "ㄷ" ...중략합니다... 참고로 한글의 마지막 글자는 힣 인데 C언어에 등록된 마지막 한글은 힛 입니다. 억울할 따름이죠. #include const char *GetInitialSound(const char *han_src) { const char *isarr[14] = {"ㄱ","ㄴ","ㄷ","ㄹ","ㅁ","ㅂ","ㅅ", "ㅇ","ㅈ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"}; const char *isarr2[1..

쉬프트 연산

쉬프트 연산 좌항이 int형일 경우에 >는 산술 쉬프트입니다. 좌항이 unsigned일 경우에는 모두 논리 쉬프트입니다. 아래 디스어셈블리 창을 참고하세요. (s는 쉬프트,h은 논리, a는 산술 , l은 좌측, r은 우측) shl : 좌측논리쉬프트, sar:우측산술쉬프트, shr:우측논리쉬프트 즉, 차이는 우측 쉬프트연산에서 차이가 발생하게 됩니다. 논리 쉬프트는 빈 자리를 0으로 채웁니다. 산술 쉬프트는 빈 자리를 부호비트로 채웁니다. 예제를 통해 풀어봅시다. int fun1(unsigned word) { return (int) ((word 24); } int fun2(unsigned word) { return ((int) word 24); } 127은 이진수로 표기하면 0000 0000 0000 00..

반응형