원래 동적 메모리 글을 연달아서 올렸어야 하는데
실수로 다음글을 먼저 올려버렸네요!!!
쩔 수 없이 동적 메모리 응용 문제 글을
다음 순서에 업로드합니다~~
처음 작성한 잘못된 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//#include <string.h>
int main(void)
{
int N;
int* arr;
int count = 0, sum = 0;
printf("숫자의 갯수 : ");
scanf("%d", &N);
//printf("\n");
arr = (int*)malloc(sizeof(int) * N);
//arr = (int*)calloc(std, sizeof(int));
for (int i = 0; i < N; i++)
{
//N은 숫자의 갯수
//printf("%d", i + 1);
scanf("%d", &arr[i]);
for (int j = 1; j <= arr[i]; j++) {
if ((arr[i] / j) == 0) {
count++;
}
}
}
if (count == 2) {
sum++;
}
free(arr);
//avg = sum / N;
printf("소수의 갯수는 %d", sum);
return;
}
쳇,, 왜 안되는 거야~ ㅎ
라면서
패기롭게 소수 구하는 변수
대충 sum으로 갈겨놓기,,^^
머어땨용 ㅠㅠ
이 아니라 prime으로 바꾸겟음니다..
for (int j = 1; j <= arr[i]; j++) {
if ((arr[i] / j) == 0) {count++;}}}
if (count == 2) {sum++;}
free(arr);
printf("소수의 갯수는 %d", sum);
입력받은 숫자를 j로 나눠서
딱 떨어지는 j가 두개가 나오면
=소수면
sum(여기선 소수의 총 갯수를 지칭..^^)
을 ++하려는 비장한 계획이었으나
소수 갯수 : 0이라는 결과만 나와서
대실패
두번째 시도
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int N; //숫자의 갯수
int* arr;
int j;
int prime = 0;
printf("숫자의 갯수 : ");
scanf("%d", &N);
//printf("\n");
arr = (int*)malloc(sizeof(int) * N);
//arr = (int*)calloc(std, sizeof(int));
for (int i = 0; i < N; i++)
{
//N은 숫자의 갯수
//printf("%d", i + 1);
scanf("%d", &arr[i]);
for (j = 1; j <= arr[i]; j++) {
if ((arr[i] / j) == 0) {
break;
}
}
if (j == arr[i]) {
prime++;
}
}
printf("소수의 갯수는 %d", prime);
free(arr);
return 0;
}
여러 예시들을 참조하여
여기까지는 수정 성공,,,
arr[i]를 j로 나누었을 때
0이 되면 for문 탈출
이때 arr[i]==j 면
소수라고 판단!
하지만 아무리 해도
소수의 갯수는 0만 나왔다 ㅠㅠ
도대체 뭐가 잘못된거지,,?
생각하며 보던중,,
엄청난 실수들 발견!!! ㅠ
for (j = 1; j <= arr[i]; j++) {
if ((arr[i] / j) == 0) {
break;
}
}
바로 j=1 , j <= arr[i] , arr[i] / j
...
일단 1로 나눴을때는 당연히
나머지가 0이기 때문에
2부터 시작
마찬가지로 arr[i]랑 같은 수인 j로
나눠도 무조건 나머지가 0이기 때문에
arr[i]전까지
그리고 대망의,,,
/는 나눴을 때의 몫 값
%는 나눴을 때의 나머지 값..^^
어떻게 이런 실수를 할 수가 있지,,,
따흐흐흐그흐긓ㄱ
/ 입력해놓고 안된다며 울부짖고 있었음!
휴
그렇게 완성한 최종코드!
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int N; //숫자의 갯수
int* arr;
int j;
int prime = 0;
printf("숫자의 갯수 : ");
scanf("%d", &N);
//printf("\n");
arr = (int*)malloc(sizeof(int) * N);
//arr = (int*)calloc(std, sizeof(int));
for (int i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
for (j = 2; j < arr[i]; j++) {
if (arr[i] % j == 0) {
break;
}
}
if (j == arr[i]) {
prime++;
}
}
printf("소수의 갯수는 %d", prime);
free(arr);
return 0;
}
결과

'STUDY > C' 카테고리의 다른 글
[모각코 C언어 메이트 심화편] 헤더파일 | (0) | 2022.02.24 |
---|---|
[모각코 C언어 메이트 심화편] 문자열 함수 | 버퍼 | 문자열 길이 비교 (0) | 2022.02.24 |
[모각코 C언어 메이트 심화편] 동적 메모리 할당 | 점수의 평균 구하기 (0) | 2022.02.24 |
[모각코 C언어 메이트 심화편] 함수 포인터 | 사칙연산 계산기 만들기 (1) | 2022.02.24 |
[모각코 C언어 메이트 심화편] 도전 문제 | 2차원 배열과 이중포인터 (0) | 2022.02.24 |