본문 바로가기
  • 시간(時間)을 아끼는 방법은 시간을 낭비하지 않는것


C_ language/C언어 심화_모각코

C언어_심화_동적 메모리 할당 문제

by pk7912 2022. 6. 28.
728x90

커뮤니티_모각코 (모여서, 각자, 코딩) 활동을 하면서 배운 내용을 되새기며 쓴 글입니다.
코딩을 배우고 싶다면 코뮤니티 활동을 적극 추천합니다.
https://cafe.naver.com/codeuniv

 

코딩 커뮤니티 - 코뮤니티 [파이썬/... : 네이버 카페

코뮤니티 [코딩공부/독학/스터디/대외활동] : python, C언어, java, 자바스크립트, HTML, CSS, 웹/앱개발

cafe.naver.com

 

 

     


    소수 출력하기( 동적 할당 활용해서 소수의 개수를 출력하는 문제)

    임의의 N개의 숫자를 입력받고, 그중에서 소수인 수의 개수를 출력하는 프로그램을 만들어보세요.

     

    입력 ex)

    숫자의 개수 : 5 
    3 
    9 
    13
    20 
    12

    출력 ex)

    소수의 개수는 2입니다.

     

     


    풀어보기

    #pragma warning(disable : 4996)
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	int j;
    	int	N;
    	int k = 0;
    	int* arr;
    	
    	printf("숫자를 입력하세요.\n");
    	printf("숫자의 개수 : ");
    	scanf_s("%d", &N);
    
    	arr = (int*)malloc(N * sizeof(int));
    
    	for (int i = 0; i < N; i++)
    	{
    		scanf_s("%d", &arr[i]);	
    	}		
    //1은 자연수 
    //소수란 1 과 자기자신만 갖는수(짝수는 제외(그중 2는 소수임))
    	for (int i = 1; i < N; i++) //1은 자연수제외
    	{
    		for (j = 2; j < i; j++)
    		{
    			if (i % j == 0) {
    				break;   // 짝수 제외
    			}
    		}
    		if (j == i) {
    			arr[k] = j;
    			k++;
    		}
    	}
    	printf("소수의 개수는 %d입니다.", k);
    	free(arr);
    
    	return 0;
    }

     

     

     

    #pragma warning(disable : 4996)
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	int i,j, count;
    	int	N = 0;
    	count = 0;
    	int* arr;
    
    	printf("숫자의 개수 : ");
    	scanf_s("%d", &N);
    
    	arr = (int*)malloc(N * sizeof(int));
    
    	for (i = 0; i < N; i++)
    	{
    		scanf_s("%d", &arr[i]);
    
    		for (j = 2; j < arr[i]; j++)
    		{
    			if (arr[i] % j == 0)
    				break;   // 약수체크
    
    		}
    
    		if (j == arr[i]) {
    			/*arr[i]++;*/
    
    			count++;
    		}
    	}
    	printf("%d", count);
    
    	free(arr);
    
    	return 0;
    
    }

     

     

    #pragma warning(disable : 4996)
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	int i,j, count;
    	int	N = 0;
    	count = 0;
    	int* arr;
    
    	printf("숫자의 개수 : ");
    	scanf_s("%d", &N);
    
    	arr = (int*)malloc(N * sizeof(int));
    
    	for (i = 0; i < N; i++)
    	{
    		scanf_s("%d", &arr[i]);
    
    		for (j = 2; j <= arr[i]; j++)
    		{
    			if (arr[i] % j == 0)
    			{
    				if (j == arr[i])
    					count++;
    				else
    					break;
    			}
    		}
    	}	
    	printf("소수의 개수는 %d입니다.\n", count);
    
    	free(arr);
    
    	return 0;
    }

     

     

    #pragma warning(disable : 4996)
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	int i, j, cnt;
    	int n = 0;
    	int count = 0;
    	int* arr;
    	
    	printf("숫자 몇개 : ");
    	scanf_s("%d", &n);
    
    	arr = (int*)malloc(n * sizeof(int));
    
    	for (i = 0; i < n; i++)
    	{
    		scanf_s("%d", &arr[i]);
    
    		cnt = 0;
    
    		for (j = 1; j <= arr[i]; j++)
    		{
    			if (arr[i] % j == 0)
    				cnt++;
    		}
    		if (cnt == 2) {
    			count++;
    						
    		}
    	}
    	printf("\n%d\n", count);
    	free(arr);
    	return 0;
    }

     

     

    마무리

    코드는 답이 하나라고 생각 하면 안 된다고 배웠습니다.

    코딩하는 사람마다 다를 수 있으니깐 여러 코드를 보고 학습하는 게 좋을 거 같네요~

    이문 제답들은 이것저것 참고하면서 짠 거라 크게 다르진 않지만 그래도 두루두루 보는 게 도움될 것 같습니다.

     

     

     

     

     

     

     

     

     

     

     

     

    댓글