***기억력 테스트

 

이 문제는 배열을 사용하여 푸는 문제로 먼저 10개의 숫자들을 차례대로 배열에 입력한 후, k번의 숫자를 출력하는

문제이다. 

 

#include<stdio.h>

int main()
{
    int a[10] = {};
    int k;
    for (int i = 0; i <= 9; i++)
    {
        scanf("%d", &a[i]);
    }
    scanf("%d", &k);
    printf("%d", a[k-1]);

    return 0;
}

 10개의 수를 입력받아야하니 배열10개를 만들어줍니다. 그 후 scanf와 for 문을 이용하여 차례대로 1번째~10번째 까지 입력해줍니다. printf("")를 통하여 배열을 출력해줍니다.

배열의 순서를 a[0] -> 1번째라는 것을 주의하며 사용해줍니다.

 

 

 

 

***괄호 개수 세기

 

 

for 문과 if 문을 사용하여서( 는 a+=1 , ) 는 b+=1이런식으로 해결한다.

먼저 입력한 값을 배열에 넣어주는 방식으로 해결하면 훨씬 쉽게 해결할 수 있다.

 

#include<stdio.h>

int main()
{
	char a[100001] = {};
	int i = 0, x = 0, y = 0;
	scanf("%s", a); // c = 'a' // s = "asdfggh"

	for (i = 0; a[i] != '\0'; i++)//\0 = 널문자 = 문장이 끝남! // "abcdefg" "((())()(()))\0" 
	{
		if (a[i] == '(')
			x += 1;

		else if (a[i] == ')')
			y += 1;

	}

	printf("%d %d", x, y);

	return 0;

}

 char 형 배열에는 shflkjda 같이 구분없이 작성해도 순서대로 각자 따로 배열에 들어갈 수 있다

그리고 각자 순서에 들어가고 마지막의 배열자리에 \0 이 오게된다. 따라서 10000까지라 해도

범위를 한자리를 더 늘려야한다.

scanf 에 문자열 입력시 & 빼고 써도 됨.

 

 

 

*** 빠진카드

 

배열을 사용하는 문제로 먼저 카드의 갯수를 입력받고, 숫자를 순서대로 입력했을때 빠진

하나의 숫자를 출력하는 문제이다. for 문을 두개 사용해서, 하나는 배열에 입력하고, 하나는 배열에 빠진 숫자를

검사하는 식으로 입력한다.

 

#include<stdio.h>

int main()
{
    int n,num1;
    int a[51] = {};
    scanf("%d", &n);

    if (n >= 3 && n <= 50)
    {
        for (int i = 0; i < n-1; i++)//입력한 숫자의 순서에 1 을 더해서 입력했다는 것을 알림
        {
            scanf("%d", &num1);
            a[num1] +=1;

        }

        for (int i = 1; i <= n; i++)//입력된 수 중에서 1 이 아닌 수를 입력합니다.
        {
            if (a[i] == 0)
            {
                printf("%d", i);
                break;
            }
        }


    }
    return 0;

}

 

첫번째 for문에서

카드의 수를 입력하고 번호를 입력하면, 그 번호만큼의 배열순서에 1을 더해서 이 번호는 입력되었다는 것을 알린다.

 

두번째 for 문에서

검사하는 과정으로 1이 아닌 수를 발견하면 해당 순서번호를 출력하게 했다. 

0은 입력하지 않았으므로 i=0 부터하게되면 오류가 나기 때문에 조심하자.

 

 

***알파벳 개수 출력하기

 

 

역시 배열을 사용하여 푼다.

 

#include <stdio.h>

int main()
{
	char str[26];
	int al[26] = {};
	scanf("%[^\n]s", str);  //공백,특수문자 모두 포함하게 하는부분.
    
	for (int i = 0; i < 26; i++)  //str의 순서를 차례대로 넘기는 부분.
	{
		for (int j = 0; j < 26; j++)  //str에 어떤 알파벳이 있는지 알아보는부분.
		{
			if (str[i] == (j + 97))  //str에 어떤 알파벳이 쓰였는지 al에 기록하는 부분.
				al[j] += 1;
		}
	}
	for (int i = 0; i < 26; i++)	//찾은 값을 모두 출력하는 부분.
		printf("%c:%d\n", (i + 97),al[i]);
		
	
	return 0;
}

 

근데.. 왜 코드업에선 안될까....

 

 

*** 함수로 prime 또는 composite 출력하기

 

 

#include <stdio.h>

int n;


// 이 부분에 들어가야 될 코드를 작성하여 제출

int main()
{
  scanf("%d", &n);
  f(n);
  return 0;
}

넣은 값은..

 

#include <stdio.h>

int n;
void f(int n)
{
    int sum;
    for (int i = 1; i <= n; i++)
    {
        if (n % i == 0)
            sum += i;
    }

    if (sum == n + 1)
        printf("prime");

    else if (sum > 1 && sum != n + 1)
        printf("composite");
}

int main()
{
    scanf("%d", &n);
    f(n);
    return 0;
}

void 로 한 이유는 프린트하고 끝나는 식이기에 리턴값이 필요없기 때문에 void로 한다.

함수는 계산기(기계)라고 생각을하자. 함수 블록에 값을 넣고 다시 메인함수로 값을 도출해 낼때 리턴을 쓴다.

 

+ Recent posts