'+ , -' 교행 분수 수열
자바로 구현
while(true)로 무한루트
분모의 팩토리얼 구하는.
B%2==1이면 덧셈, 아니면 뺄셈
B>10이면 break
count 알고리즘
시험 성적 80점 이상인 학생의 수 count 구하는 알고리즘
배열 변수 JUMSU(100)에 대해 생각 배열 변수은 첫번째 1부터 100까지 순서를 메기면 J[0] ~ J[99]
80점 이상인 학생수를 변수 CNT에 저장
여기서 I는 처리할 학생을 말함.
-> 반복용 변수의 진행방식 바꾸려면? 초기값 100 / i = i - 1 식으로
최댓값과 최솟값
영어시험 만점 학생들 중 가장 높은 수학 시험 점수를 가지고 있는 학생의 수학 점수를 찾아서 출력하는 알고리즘
- 시험 본 학생 200명
- 영어줌수는 배열 변수 ENG(200) 수학점수는 배열변수 MATH(200)에 저장
- 영어 , 수학 모두 100점 만점 , 영어 점수가 만점인 학생이 최소한 1명 존재한다고 가정
1) 영어 점수가 만점인지
2) 수학 점수가 최고점인지
둘다 만족해야 된다.
합계와 평균
휴대폰 고객 1명이 한달 도안 사용하는 총 통화시간을 토대로 일일 평균 통화시간을 구하는 알고리즘
- 한달 30일 , 매일(i)의 통하시간을 변수 T(i)에 저장
- 만일 일일 통화 시간이 200초 이하이면 무료서비스, 총 통화시간에서 제외하고 평균 통화시간을 산정하는 과정에서 제외
i = 1 부터 증가
200보다 작으면 무료
i는 앞으로 처리할 것
소수판별 알고리즘
1부터 100사이에서 가장 큰 소수 구하는 알고리즘
자연수 N이 소수라면 2부터 N의 제곱근 루트N까지의 자연수들 중에서 N을 나누어 떨어지게 하는 수는 존재하지 않음.
N의 제곱근은 시스템 함수 SQRT(N)을 호출하여 계산
초깃값은 소수 2
2부터 루트 N 검사
다음에 점검할 N
소인수 분해
자연수 N을 입력받아 소인수 분해하여 결과를 출력하는 과정을 반복하는 알고리즘
소수입력하면 소수출력 , 20입력하면 2*2*5출력
-입력받은 값 N은 1000이하의 자연수로 가정
- 입력받은 정수 N이 2보다 작으면 알고리즘 종료
- 입력받은 정수 N이 소수면 소수라고 출력
- 입력받은 N이 소수가 아니면 소인수 분해 한 결가를 출력
- 단계별로 소운수 분해한 결과를 배열에 저장해 두었다가 한꺼번에 출력
P는 N을 P로 나눈 나머지 0이 아니면 반복.
여기서부터 출력하는 부분
T가 1이면 소수 T가 일이 아니면 반복
T = T - 1하면서 반복
T가 소수가 몇개인지 나타냄.
배수와 공배수
배열 A에 21 17 ,4 51 24 75 40 27 48 72가 A(!)부터 시작하여 순차적을 ㅗ입력
2의 배수이면서 4의 배수인 수의 개수를 구하는 알고리즘
약수와 완전수
4부터 500까지의 자연수 중에서 완전수를 찾아 출력하고 개수를 구하는 알고리즘
완전수 개수 처음에는 0
자연수 n의 절반의 값을 계산
j가 자연수 n의 약수인 경우 sum에 더한다.
완전수인지 확인하는 방법 n =sum
완전수일때 tn증가
출력 tn 완전수의 개수
1의 보수와 2의 보수 알고리즘
N의 보수 / N-1의 보수
이진수 1010100
1의 보수 0101011
2의 보수 0101100
1부터 n까지 반복하며 1의 보수 구함
오른쪽
n부터 시작해서 감소함
2의 보수는 T(i)와 c의 값이 같을때 0이고 다르면 1
새로운 캐리 c는 이전 캐리와 O(i) 모두 1일때만 1이 된다.
최대공약수와 근사값
최대공약수 GCD
최소공배수 LCM
유클리드 호제법에 의해 정수 X,Y의 최대공약수 구하는 알고리즘
+ 최대 공약수로 최소 공배수 구하는 방법
X와 Y의 초소공배수는 X와 Y의 곱을 X와 Y의 최대공약수로 나누면 된다.
G를 X와 Y의 최대공약수라고 하면 X = aG, Y =bG
따라서 X*Y = aG * bG = abGG로 최소공배수 = abG = X*Y/G가 된다.
근사값
배열 A(100)의 원소 100개는 절대값이 500이하이다. 이중 정수 33에 가장 가까운 근사값을 찾아 해당 원소의 첨자를 출력하는 알고리즘
- 33보다 작으면 차이는 33-배울원소의 값
- 33보다 크면 차이는 배열 원소의 값 -33