***기억력 테스트
이 문제는 배열을 사용하여 푸는 문제로 먼저 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로 한다.
함수는 계산기(기계)라고 생각을하자. 함수 블록에 값을 넣고 다시 메인함수로 값을 도출해 낼때 리턴을 쓴다.
'멘토링 (codeup & 코딩도장 & 기타 문제)' 카테고리의 다른 글
부루마블을 만들자! C언어 코딩 (0) | 2021.05.28 |
---|---|
멘토링 (codeup 1089~1091 , 1093~1095) + 제곱수 문제 (0) | 2021.05.03 |
멘토링 (codeup c언어 기초 100제) 1079~1081번 & 코딩도장) (0) | 2021.04.30 |
c언어 멘토링 04 .27 (0) | 2021.04.27 |
멘토링(codeup c언어 기초 100제) 1074~1077번 + 추가문제 (0) | 2021.04.27 |