심화 과제 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 |