과제

Day8 - 함수, 피보나치 수열

qltjfeo55555 2024. 11. 29. 19:26

심화 과제 1. 복합조건을 가진 함수 제작

  • 인자값으로 정수형 하나가 주어지면, 숫자 1에서부터 인자값으로 전달받은 숫자 사이의 모든 자연수 중, 3의 배수이거나 5의 배수인 수들의 합을 구하여 정수형으로 반환하는 함수를 작성하세요
 int num = 0;

 Console.Write("수 입력바람 : ");
 num = int.Parse(Console.ReadLine());

 Console.Write("3의배수 + 5의배수 - 15의배수 = ");
 Console.WriteLine(dupsum(num));
 
 
 //함수 선언
  static int dupsum(int num)
 {
     
     int numsum3 = 0;
     int numsum5 = 0;
     int numsum15 = 0;
     int sum = 0;

     for (int i = 1; i < num; i++)
     {
         if (i % 3 == 0)
         {
             numsum3 = numsum3 + i;
         }
         if (i % 5 == 0)
         {
             numsum5 = numsum5 + i;
         }
         if (i % 15 == 0)
         {
             numsum15 = numsum15 + i;
         }


     }

     sum = numsum3 + numsum5 - numsum15;
 
     return sum;
 }

1. 3의 배수 + 5의 배수 - 15의 배수(중복 값) 을 뺄 생각으로 큰 틀을 짰다.

2. 반복문을 통해 만약 3의 배수이면 numsum3에 더한다. 그리고  5의 배수, 15의 배수를 했다

3.  sum = numsum3 + numsum5 - numsum15; 하고 sum을 반환함으로써 메인 코드에는 sum이라는 수가 가는 것이다.

 

심화 과제 2. 자릿수 합 디코더 제작

  • 인자값으로 1이상의 수를 입력받았을 때, 주어진 정수의 각 자리 수를 더한 결과를 정수형으로 반환하는 함수를 작성하세요. 예를 들어, 5611은 5+6+1+1 로 13을 반환하는 함수입니다.
int num = 5611;
           

Console.Write("5611입력 : ");

//num = int.Parse(Console.ReadLine());
num = int.Parse(Console.ReadLine());

Console.WriteLine(Sumdecoder(num));


//함수 사용
static int Sumdecoder(int num)
{
    int sum = 0;
    int num1000 = num / 1000;
    int num100 = (num - (num1000 * 1000)) / 100;
    int num10 = (num - (num1000 * 1000) - (num100 * 100)) / 10;
    int num1 = (num - (num1000 * 1000) - (num100 * 100) - (num10 * 10));

    sum = num1000 + num100 + num10 + num1;


    return sum ;
}

1. 다른 사람 발표 내용 중에 1000나누기, 100나누기 이런 식으로 자릿수 숫자를  알 수있는 걸 보고 사용해 봤다.

2. 확인용으로  int num = 5611; 선언하고 num = int.Parse(Console.ReadLine()); 이 부분을 주석 처리하였다. 

3. 위에 코드랑 같은 방식으로 sum = num1000 + num100 + num10 + num1; 선언하고 sum을 반환하였다.

4. num = int.Parse(Console.ReadLine()); 주석을 제거하고 잘 되는지 확인했다.

 

심화 과제 3. 피보나치 함수 제작

  • 피보나치 수란, 맨 첫째와 둘째 항은 각각 1이지만, 그 뒤로 오는 모든 항은 앞의 두 항의 합인 수열입니다. 예를 들어 [1,1,2,3,5,8,...] 이렇게 4번째(3) 항목은 2번째(1)와 3번째(2)의 합이고, 마찬가지로 6번째(8) 항목은 바로 앞 4번째(3), 5번째(5)의 합인 형태입니다. 함수의 인자값으로 '몇번째' 인지 정수로 건네주면, 일치하는 피보나치 수를 반환하는 함수를 제작하세요. 참고로 11번째 피보나치 수는 89, 20번째 피보나치 수는 6765 입니다.
  •  
 long dap;

 Console.Write("알고싶은 몇번쨰 수 : ");
 dap = long.Parse(Console.ReadLine());

 Console.Write("{0}번째 수는 ", dap);
 Console.WriteLine(fibonacci(dap));

//함수
static long fibonacci(long dap)
{

    long[] fibonacci = new long[dap + 1];
    fibonacci[0] = 1;
    fibonacci[1] = 1;


    for (long i = 2; i < dap + 1; i++)
    {
        fibonacci[i] = fibonacci[i - 2] + fibonacci[i - 1];


    }

    return fibonacci[dap-1];
}

1. 처음에 int형으로 했는데 int가 담을 수 있는 약21억이라 수가 넘어가니 -가 떠서 long 형식으로 바꾸었다.

2. 피보나치 수열은 첫째 항,둘째 항을 1로 고정 후 앞의 두 항의 합이라고 해서 for 구문을 셋째 항부터 시작하고 반복하면 될 거같았다.

3. 반환값으로 fibonacci[dap-1] 했는데 [dap-1]로 하는 이유는 인간의 언어는 1부터 시작이지만 컴퓨터는 0부터 시작이라 -1을 하였다.

'과제' 카테고리의 다른 글

Day14 - Class 1,2,3단계  (0) 2024.12.09
콘솔 섯다 만들기(C#) 12/3~12/5  (1) 2024.12.05
Day4 - 연산  (1) 2024.11.29
Day7 - 3의 배수 행렬, if (C#)  (0) 2024.11.29
Day5 - 다이아몬드 출력(C#)  (0) 2024.11.27