카테고리 없음

2차시 과제

그나 2026. 4. 17. 11:13

문자열 반복

#include <stdio.h>

int main() {
    int n,a;
    char b[1001];
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        scanf("%d %s",&a,b);
        for (int j = 0; b[j]; j++){
            for (int k = 0; k<a; k++) {
                printf("%c",b[j]);
            }
            }
        printf("\n");
        }
    return 0;
}

n은 입력받을 문자열의 개수입니다. 그리고 a는 문자열에서 한 글자가 반복할 횟수, b는 그 문자열입니다. 문자열을 입력받은 뒤, 문자열의 문자를 하나씩 확인합니다. 여기서 처음 for 문은 b의 문자를 하나씩 차례대로 읽습니다. 두번째 for 문은 문자열의 j번째 문자를 a번 반복해서 출력합니다. 그리고 마지막에는 줄바꿈을 출력합니다.

주사위 게임

#include <stdio.h>

int main(){
    int n,a,b,c,money,max=0;
    scanf("%d",&n);
    for (int i=1;i<=n;i++){
        scanf("%d %d %d",&a,&b,&c);
    
    if (a==b&&b==c) money = 10000+a*1000;
    else if (a==b) money = 1000+a*100;
    else if (a==c) money = 1000+c*100;
    else if (b==c) money = 1000+b*100;
    else if (a>b&&a>c) money = a*100;
    else if (b>a&&b>c) money = b*100;
    else if (c>b&&c>a) money = c*100;
    if (max<money) max=money;
    }
    printf("%d",max);
    return 0;
}

n은 주사위를 던진 횟수이고, a,b,c는 각각 주사위 눈입니다. money는 상금이고, max는 상금 중 가장 큰 값입니다. 그리고 세 눈이 모두 같은 경우에는, 10000 + 같은 눈 중 아무거나 * 1000 이고, 두개만 같은경우, 1000 + 같은 눈 중 아무거나 * 100 이고, 모두 다른 경우에는 가장 큰 눈 * 100 이 상금입니다. for문을 이용해 주사위 눈을 n번 입력받으면서 조건문을 돌고, 상금을 계산합니다. 그 이후 또 다른 조건문을 사용하여 money의 값이 max 보다 크면 max를 갱신합니다. 마지막으로 가장 큰 상금인 max를 출력하면 끝입니다.

평균

#include <stdio.h>

int main() {
    int n, test;
    int max = 0;
    int sum = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &test);
        sum += test;
        if (test>max) max=test;
    }
    printf("%f",(float)sum / max * 100 / n);
    return 0;
}

여기서 n은 입력받을 과목 수 이고, test는 각 점수입니다. sum은 점수의 합이고, max는 가장 큰 값입니다. 일단 반복문으로 n개의 점수를 입력받습니다. 점수를 입력받을 때마다 sum에는 합을 누적시키고, test의 값이 max보다 크면 max를 갱신시킵니다. 그리고 출력은 강제 형 변환을 해서 실수 형태로 바꾼 뒤, 점수를 최댓값 기준으로 바꾸고, 다시 100을 곱합니다. 마지막으로 과목 수로 나누어 평균을 구하고 출력합니다.

덩치

#include <stdio.h>

int main() {
    int n,k;
    int ki[50],wei[50];
    scanf("%d",&n);
    for (int i=0;i<n;i++){
        scanf("%d %d",&ki[i],&wei[i]);
    }
    for (int i=0;i<n;i++){
        k=0;
        for (int j=0;j<n;j++){
            if (ki[i]<ki[j]&&wei[i]<wei[j]) k++;
        }
        printf("%d ",k+1);
    }
    return 0;
}

키랑 몸무게를 각각 ki[50] wei[50]인 배열로 입력받습니다. 그리고 몇 명의 키와 몸무게를 입력받을지를 n으로 입력받습니다. 그리고 k는 자신보다 덩치가 큰 사람의 수입니다. 일단 k를 0으로 설정해준 뒤, 만약 키와 덩치가 모두 자신보다 크다면 k에 1을 더하는 조건식을 반복문 안에 넣었습니다. 이 조건을 만족하면 j번째 사람은 i번째 사람보다 덩치가 큰 사람입니다. 그리고 순서이기 때문에 출력할때는 k에 1을 더해서 출력합니다. 예를들어 자신보다 덩치가 큰 사람이 0명이라면 자신이 1등으로 출력하는것 처럼요.

2차원 배열의 합

#include <stdio.h>
int main(){
    int n[1000][1000],x,y,count,a,b,c,d,sum;
    scanf("%d %d",&x,&y);
    for (int i=0;i<x;i++){
        for (int j=0;j<y;j++){
        scanf("%d",&n[i][j]);
        }
    }
    scanf("%d",&count);
    for (int i=0;i<count;i++){
        scanf("%d %d %d %d",&a,&b,&c,&d);
        sum = 0;
        for (int j = a - 1; j < c; j++) {
            for (int k = b - 1; k < d; k++) {
            sum += n[j][k];
                }
                }
            printf("%d\n", sum);
            }
    return 0; 
    }

위에 선언된 이차원 배열로 쓰인 n이 직사각형입니다 그리고 x,y는 사각형의 행과 열입니다. 즉, 위에 사용된 이중 for 문은 x행 y열의 크기를 가진 사각형을 만든다는 것입니다. 그리고 count로 몇번 더한값을 입력받고 출력받을지 결정합니다. 예를들어 직사각형이

1 2 3 4

5 6 7 8 이라면,

1 1 2 3 이라고 입력받았을때, (1,1)부터 (2,3)까지 있는 숫자를 모두 더해야합니다. 이 작업을 count번 반복하기 위해 이번엔 삼중 for문을 사용했습니다. 저희가 필요한 좌표는 1부터지만, 배열은 0부터이기 때문에 a,b,c,d에 각각 -1을 했습니다. 그 이후 입력받은 좌표값을 저장한뒤, 더해서 출력하면 끝입니다.