//

//  main.cpp

//  ExampleCpp

//

//  Created by 김일호 on 2015. 7. 10..

//  Copyright (c) 2015 김일호. All rights reserved.

//


#include <iostream>

#include <string>

using namespace std;


void selection(int *arr);

void swap(int *num1, int *num2);


int main()

{

    int arr[5] = {4,3,9,1,2};

    selection(arr);

}


void selection(int arr[])

{

    int i, j;

    int min;

    for(i = 0; i<5-1; i++)

    {

        min = i;

        for(j = i+1; j < 5; j++)

        {

            if(arr[j] < arr[min])

                min = j;

        }

        swap(&arr[i], &arr[min]);

        

        cout <<i+1 <<"회전: ";

        for(int k = 0; k< 5; k++)

            cout << arr[k] << " " ;

        cout << endl;

    }

}



void swap(int *num1, int *num2)

{

    int temp;

    temp = *num1;

    *num1 = *num2;

    *num2 = temp;

}

'Programing > Algorithm' 카테고리의 다른 글

프로젝트 오일러 10번  (0) 2015.07.29
프로젝트 오일러 9번  (0) 2015.04.25
Recursive Fibonacci  (0) 2015.04.06
순환/재귀 팩토리알 구현  (0) 2015.04.06
3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
Posted by kimmayer

//

//  main.c

//  project euler

//

//  Created by 김일호 on 2015. 4. 25..

//  Copyright (c) 2015년 김일호. All rights reserved.

//


#include <stdio.h>

#include <math.h>


int main(int argc, const char * argv[]) {

    long unsigned int total = 2;

    int prime;

    int n= 0;

    for(prime = 3; prime<2000000; prime++)

    {

        n = (int)sqrt((double)prime);

        

        if(prime % 2 != 0)

        {

            int flag = 0;

            for(int i = 2; i<= n; i++)

            {

                if(prime % i == 0) {flag = 1; break;}

            }

            if(flag == 0)

            {total += prime;}

            else

            {flag = 0;}

        }

    }

    printf("%ld\n", total);

    return 0;

}


/*

소수를 판별하기 위해 제곱근을 사용, 2부터 제곱근 까지 나누어진다면 flag를 1로 설정하여 아무것도 하지 않고 제곱근까지 떨어지지 않는다면 flag는 초기화값 0 이므로 더함. for문 안에 else를 써서 떨어지지 않는 값을 더하면 2부터 제곱근 까지 나누어 떨어지지 않는 수 모두를 더하기 때문에 flag를 설정

*/





'Programing > Algorithm' 카테고리의 다른 글

Selection Sort  (0) 2015.09.27
프로젝트 오일러 9번  (0) 2015.04.25
Recursive Fibonacci  (0) 2015.04.06
순환/재귀 팩토리알 구현  (0) 2015.04.06
3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
Posted by kimmayer

//

//  main.c

//  project euler

//

//  Created by 김일호 on 2015. 4. 25..

//  Copyright (c) 2015 김일호. All rights reserved.

//


#include <stdio.h>


int main(int argc, const char * argv[]) {

    int product = 0;

    

    for(int i =1; i<1000; i++)

        for (int j = 1; j<1000; j++){

            for (int k = 1; k<1000; k ++)

            {

                if( j < i && k < j)

                    break;

                if((i * i) + (j * j) == (k*k))

                {

                    product = i+j+k;

                    if(product == 1000)

                    {

                        printf("%d %d %d",i, j, k);

                        return 0;

                    }

                }

                else if (k+j>1000)

                {product = 0;break;}

                else if (k+i>1000)

                {product = 0;break;}

                product = 0;

            }

            if(i+j>1000){

                product = 0;

               break;

            }

        }

    return 0;

}



'Programing > Algorithm' 카테고리의 다른 글

Selection Sort  (0) 2015.09.27
프로젝트 오일러 10번  (0) 2015.07.29
Recursive Fibonacci  (0) 2015.04.06
순환/재귀 팩토리알 구현  (0) 2015.04.06
3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
Posted by kimmayer

#include <stdio.h>


int fibonacci(int n);

int main()

{

    int number;

    int total = 0;

    printf("input the number\n");

    scanf("%d", &number);

    printf("recursive fibonacci = %d \n", fibonacci(number));

}


int fibonacci(int n){

    if (n < 3)

        return 1;

    else return fibonacci(n-2) + fibonacci(n-1);

}


/*C++ 피보나치 합 구하기*/

#include <iostream>

using namespace std;


int fibonacci(int n);


int main()

{

int total = 0;

int n = 0;

for (int i = 0; i <= 5; i++)

{

n = fibonacci(i);

total += n;

}

cout << total << endl;

}


int fibonacci(int n)

{

if (n == 1 || n == 2)

return 1;

else if (n == 0)

return 0;

else

return fibonacci(n - 1) + fibonacci(n - 2);

}

'Programing > Algorithm' 카테고리의 다른 글

프로젝트 오일러 10번  (0) 2015.07.29
프로젝트 오일러 9번  (0) 2015.04.25
순환/재귀 팩토리알 구현  (0) 2015.04.06
3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
프로젝트 오일러 7번  (0) 2015.02.10
Posted by kimmayer


#include <stdio.h>


int factorial(int x);

int main()

{

    printf("input the number\n");

    int size;

    scanf("%d", &size);

    

    int total = 1;

    for(int i = size; i>1; i--)

        total *= i;

    

    printf("%d recursive factorial is %d \n", size, factorial(size));

    printf("%d iterative factorial is %d \n", size, total);

}


int factorial(int x){

    if (x>1)

        return x * factorial(x-1);

    else return x;

}

'Programing > Algorithm' 카테고리의 다른 글

프로젝트 오일러 9번  (0) 2015.04.25
Recursive Fibonacci  (0) 2015.04.06
3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
프로젝트 오일러 7번  (0) 2015.02.10
프로젝트 오일러 6번  (0) 2015.02.10
Posted by kimmayer


#include <stdio.h>

void sort(int *x, int *y, int *z);


int main()

{

    int x=4, y=11, z=8;

    sort(&x, &y, &z);

    printf("%d %d %d\n",x,y,z);

}



void sort(int *x, int *y, int *z){

    int temp;

    if(*x < *y){

        temp = *x;

        *x = *y;

        *y = temp;

        sort(x, y, z);

    }

    else if(*y < *z){

        temp = *y;

        *y = *z;

        *z = temp;

        sort(x, y, z);

    }

    else if(*x < *z){

        temp = *x;

        *x = *z;

        *z = temp;

        sort(x, y, z);

    }

}



'Programing > Algorithm' 카테고리의 다른 글

Recursive Fibonacci  (0) 2015.04.06
순환/재귀 팩토리알 구현  (0) 2015.04.06
프로젝트 오일러 7번  (0) 2015.02.10
프로젝트 오일러 6번  (0) 2015.02.10
프로젝트 오일러 5번  (0) 2015.02.10
Posted by kimmayer

문제: 소수 중 처음 6개를 나열하면 2, 3, 5, 7, 11, 13 이다. 이 때 6번째 소수는 13이다.

10001번째 소수는 무엇인가?


#include <stdio.h>

 

int main(){

    int count=0;

    int i;

    int j;

    for(i=2;;i++){

        for(j=2;j<=i;j++){

            if(i==j){

                count++;

                break;

            }

            else if((i%j)==0){

                break;

            }

            

        }

        if(count==10001) {break;}

    }

    printf("%d\n", i);


}

'Programing > Algorithm' 카테고리의 다른 글

순환/재귀 팩토리알 구현  (0) 2015.04.06
3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
프로젝트 오일러 6번  (0) 2015.02.10
프로젝트 오일러 5번  (0) 2015.02.10
프로젝트 오일러 4번  (0) 2015.02.10
Posted by kimmayer

문제: 1부터 10까지의 자연수의 제곱의 합은 아래와 같습니다.

12 + 22 + ... + 102 = 385

1부터 10까지의 자연수의 합의 제곱은 아래와 같습니다.

(1 + 2 + ... + 10)2 = 552 = 3025

1부터 10까지의 자연수의 합의 제곱과 제곱의 합의 차는 3025 - 385 = 2640 입니다.

1부터 100까지의 자연수의 합의 제곱과 제곱의 합의 차는 얼마인가요?



#include <stdio.h>



int main(){

    int a=0;

    int b=0;

    

    int i;

    for(i=1;i<=100;i++)

        a += (i*i);

    for(i=1;i<=100;i++)

        b += i;

    b = b*b;

    

    printf("%d\n", b-a);


}


1번보다 쉬운거 같습니다.

'Programing > Algorithm' 카테고리의 다른 글

3개의 숫자를 내림차순으로 정렬  (0) 2015.04.06
프로젝트 오일러 7번  (0) 2015.02.10
프로젝트 오일러 5번  (0) 2015.02.10
프로젝트 오일러 4번  (0) 2015.02.10
프로젝트 오일러 3번  (0) 2015.02.10
Posted by kimmayer

문제: 1 ~ 10 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 2520입니다.

그러면 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 얼마입니까?



문제를 푼 알고리즘이 있는데 코딩으로 적용시키는 것이 까다로워서 일단 알고리즘 설명만 남기도록 하겠습니다.


제가 푼 알고리즘은 

문제에서 제시된 2520을 소인수분해 하여 찾았습니다.


2520= 2^3 * 3^2 * 5 * 7

이며, 소인수분해를 보시면 1~10까지 소인수를 조합하여 모든 수를 표현 가능 합니다.

그럼 이 수에 11~20의 소수를 먼저 곱하고

X = 2^3 * 3^2 * 5 * 7 * 11 * 13 * 17 * 19

11~20사이의 수를 표현 가능한지 확인 합니다.


2^4인 16이 표현 되지 못하는군요. 저 윗식에 2를 곱합니다.

X = 2^4 * 3^2 * 5 * 7 * 11 * 13 * 17 * 19

소인수를 보시면 1~20의 수 모두 표현이 가능하므로 정답이 되겠습니다.



PS) 해답을 보면 제가 풀은 알고리즘을 예시로 들고 log를 이용하여 새로운 식(일반해?라고 해야할까요)을 정의합니다.

'Programing > Algorithm' 카테고리의 다른 글

프로젝트 오일러 7번  (0) 2015.02.10
프로젝트 오일러 6번  (0) 2015.02.10
프로젝트 오일러 4번  (0) 2015.02.10
프로젝트 오일러 3번  (0) 2015.02.10
프로젝트 오일러 2번  (0) 2015.02.10
Posted by kimmayer

문제: 앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다.

두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009 (= 91 x 99) 입니다.

 

세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까 ?

 

#include <stdio.h>
int main() {
int i, j;
int x;
int sol = 0;
int n1, n2, n3, n4, n5, n6;
for (i = 999; i > 100; i - )
	for (j = 999; j > 100; j - ){
		x = i * j;
		n1 = x / 100000;
		x = x % 100000;
		n2 = x / 10000;
		x = x % 10000;
		n3 = x / 1000;
		x = x % 1000;
		n4 = x / 100;
		x = x % 100;
		n5 = x / 10;
		x = x % 10;
		n6 = x / 1;
		if ((n1 == n6) && (n2 == n5) && (n3 == n4)){
			printf("n1 = %d,n2 = %d,n3 = %d,n4 = %d,n5 = %d,n6 = %d \n", n1, n2, n3, n4, n5, n6);
			x = i*j;
			if (x > sol){
				sol = x;
				break;
			}
		}
	}
printf("%d \n", sol);
}

3자리 x 3자리로 이루어진 가장 큰 대칭수는 6자리라고 단정 짓고 짠 알고리즘,

 

 

해답:

대칭수 P는 x,y,z로 구성 가능. P= a x b(a와 b는 100보다 크고 999보다 작은 정수)

P는 반드시 적어도 6자리로 긴 정수 일것이다. 왜냐하면 111111=143 x 777 이기 때문(P는 3자리 x 3자리로 이루어진 대칭수 111111보다 크거나 같을 것)

따라서,

 

P=100000x+10000y+1000z+100z+10y+x

P=100001x+10010y+1100z 

P=11(9091x+910y+100z)

 

11은 소수로 반드시 a, b는 11을 약수로 가짐

따라서 11로 나누어 지지 않는다면 대칭수가 아님.

 

largestPalindrome = 0

a = 999

while a >= 100

if a mod 11 = 0

b = 999

db = 1

else

b = 990 //The largest number less than or equal 999

 //and divisible by 11

db = 11

while b >= a

if a*b <= largestPalindrome

break

if isPalindrome(a*b)

largestPalindrome = a*b

b = b-db

a = a-1

output largestPalindrome

'Programing > Algorithm' 카테고리의 다른 글

프로젝트 오일러 6번  (0) 2015.02.10
프로젝트 오일러 5번  (0) 2015.02.10
프로젝트 오일러 3번  (0) 2015.02.10
프로젝트 오일러 2번  (0) 2015.02.10
Kadane's Algorithm  (0) 2015.02.10
Posted by kimmayer
이전버튼 1 2 이전버튼

블로그 이미지
IT 기술들 정리, 독후감을 주로 남깁니다!
kimmayer

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함