728x90
#include <vector>
long long sum(int* a, int n) {
    long long ans = 0;
    for (int i = 0; i < n; i++) {
        ans += a[i];
    }
    return ans;
}

이 문제를 처음에 보는 순간

무엇을 만들어야지 생각을 할 수 있다.

 

하지만 걱정할 필요가 없다.

기본 틀이 주어지기 때문이다.

C언어에서는 지금 for문외에는 틀이 있었다.

이제 개수를 세주면서 n개 까지 가서 a의 배열을

ans에 더해준다는 의미만 추가해주면

문제 없이 출력된다.

 

참고로 이건 백준 사이트에서만 가능하다.

비주얼스튜디오는 안돌아간다.

 

이 문제는 함수가 어떻게 되는지 알려주려고

만든 문제라고 생각한다.

https://www.acmicpc.net/problem/15596

728x90
728x90
#include <stdio.h>
int main(void) {
    int num;
    scanf_s("%d", &num);
    int student;
    for (int i = 0; i < num; i++) {
        int a[1000];
        int sum = 0;
        double average = 0.0;
        scanf_s("%d", &student);
        for (int i = 0; i < student; i++) {
            scanf_s("%d", &a[i]);
            sum += a[i];
        }
        average = (double)sum / student;
        int count = 0;
        for (int i = 0; i < student; i++) {
            if (average < a[i]) count++;
        }
        printf("%.3lf%%\n", (double)count * 100 / student);
    }
    return 0;
}

이 문제는 조금 많이 어려웠다.

쉽게 만든 총 입력받을 수 설정하기

그렇지만 두번째가 어렵다.

첫번째 숫자는 그 줄에서 총 입력 받을 수를 받는 것이고

그 줄 나머지는 계산하여 평균을 계산해야 한다.

첫 수 입력 받는 것은 쉬우므로 넘어가고

5번째 줄에서 학생 수 변수를 설정한다.

 

하지만 일단 우선적으로 총 몇번 할 것인지가 필요하므로

for문으로 넣어준다.

최대 1000개까지 가능하므로 배열을 1000개 설정하고

sum은 0으로 초기화하고

평균은 소수점이므로 double형으로 0.0으로 설정한다.

그리고 학생수를 저장을 시켜준다. 

c언어는 \n이 없으면 다음 수로 넘어가지 않으므로

%d로 첫번째 수만 설정해줄 수 있다.

 

다음으로는 첫번째 수 저장한 것을 가지고 개수를 세며

배열을 저장시켜준다.

그리고 그 배열을 sum으로 합을 구해준다.

 

평균은 sum에서 student로 나눠주는 것은 알기 쉽다.

하지만 double 형으로 꼭 바꿔줘야 한다.

소수점이 나와야 하기 때문이다.

 

그리고 여기서 한번더 카운트를 해주어야 한다.

솔직히 여기서 조금 의문이긴 했는데

다시 보니 평균을 넘는 학생의 수를 구해야 하니까?

 

출력을 할 때에는 소수점 셋째자리까지이므로 .3lf가 나와야하고

%가 보이기위해 %%두번 표현한다.

그리고 줄바꿈이 나와야 한다.

count * 100 /student가 첨엔 이해가 안되었다.

문제를 기억해야 한다.

평균을 넘는 학생수의 비율을 계산한다.

그러므로 평균을 넘는 학생수에서 설정한 학생수로 나누고

비율인데 0 밑으로 나올 것이므로 100을 곱하는 것이다.

 

이 원리로 코드가 만들어진다.

 

https://www.acmicpc.net/problem/4344

728x90
728x90
#include <stdio.h>
int main(void) {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("%d\n", a * (b % 10));
    printf("%d\n", a * ((b / 10) % 10));
    printf("%d\n", a * (b / 100));
    printf("%d\n", a * b);
    return 0;

}

이 문제는 약간 생각을 할 필요성이 있는 문제이다.

첫번째로 곱셈이 어떻게 진행되는가이다.

그로고 이를 어떻게 곱해주는 방식을 택해야 할 것인가가

문제라고 볼 수 있다.

생각을 해보면

a에서 b를 곱할 때

b가 밑에 있다. (문제 그림참조)

그러면 일의자리수는 나머지를 통해 이를 도출해 내고

다음으로는 십의자리를 위해 10로 나누고 또다시 나머지로 하면 된다.

그리고 마지막인 백의자리수를 위해 100을 나누는 방식을 채택한다.

 

최종적으로 곱한 값까지 출력시키면

곱셈의 과정이 완전히 드러나게 된다.

이렇게 진행을 하면된다.

https://www.acmicpc.net/problem/2588

728x90

+ Recent posts