문제풀이/C언어

간단한 프로그램 만들기 2

DDD Developer 2024. 8. 19. 23:29
728x90
반응형

간단한 프로그램 함수로 구현하기 14

 

가위바위보 게임 만들기

난수 발생 함수를 사용하여 컴퓨터와 대전이 가능한 가위바보 게임을 만들어 보세요.

 

@참고 사항

게임을 위한 각 기능들을 별도의 함수로 만들도록 한다.

게임을 위해 필요한 기능으로는 사용자 입력, 컴퓨터 입력, 판정, 결과 출력 등이 있다.

각 기능은 다음과 같은 삼수로 구현한다.

함수1 : 사용자로부터 입력을 받기 위한 함수이다.

사용자로부터 0, 1, 2, 3의 값을 입력 받을 수 있는데 1, 2, 3은 각 가위, 바위, 보에 대응되는 정숫값이고, 0이 입력되면 결과를 출력한 후 프로그램을 종료한다.

단, 지정된 번호 이외의 값이 입력될 경우 오류 메시지를 출력한다.

함수2 : 난수 발생 함수를 사용하여 1~3의 값 중 임의의 값을 생성하며 이에 따라 컴퓨터의 가위, 바위, 보를 결정한다.

함수3: 해당 게임에 대한 승패를 결정하는 함수이다.

함수4: 최종적으로 사용자의 승, 무승부, 패에 대한 횟수를 출력한다.

필요한 경우, 전역 변수를 사용하지만 최소한으로 한다.

 

@ 실습 및 프로그래밍 절차

- 승부, 무승부수, 패수를 기록하기 위한 변수와 사용자의 가위, 바위, 보 / 컴퓨터의 가위, 바위, 보 등 필요한 변수를 선언한다.

- 함수2를 사용하여 컴퓨터의 가위, 바위, 보를 생성한다.

- 함수1을 사용하여 사용자로부터 가위, 바위, 보를 입력받는다.

- 함수3을 사용하여 현재 게임에 대한 승패를 판단하고 결과를 출력한다. 또한 이에 따라 승수, 무승부수, 패수를 갱신한다.

- 사용자가 0 이하의 값을 입력하면 최종적으로 승수, 무승부수, 패수를 출력하고 프로그램을 종료한다.

 

@실행 예

 

 

 

C 언어 랜덤 참고

 

rand()와 srand() (tistory.com)

 

rand()와 srand()

1. 기본 개념 rand() 임의의 난수 하나를 생성한다. 범위는 0~RAND_MAX, 0~32767(0x7fff) 이다. srand() 시간 값을 매개로 난수를 생성한다. time(NULL) 현재 시간을 초단위로 변경해 반환    2. 기본 사용법 

basiclike.tistory.com

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int p1(void);
int p2(int i,int j);

int main(void) //함수 1 사용자 입력
{   

    int a,n,i,j,b,c,d,w,l;
    d=0;
    w=0;
    l=0;

    
    printf(">>>가위(1), 바위(2), 보(3) 입력(끝내려면 q): ");
    while (scanf("%d",&a)==1)
    {   
        
        if (a==1)
            {
                printf("사용자는 가위를 냈습니다.\n");
                
                b=p1();
                c=p2(a,b);
                if (c==1)
                    d=d+1;
                else if (c==2)
                    l=l+1;
                else
                    w=w+1;

                
            }
        else if (a==2)
            {
                printf("사용자는 바위를 냈습니다.\n");

                b=p1();
                c=p2(a,b);
                if (c==1)
                    d=d+1;
                else if (c==2)
                    l=l+1;
                else
                    w=w+1;

                
            }
        else if (a==3)
            {
                printf("사용자는 보를 냈습니다.\n");

                b=p1();
                c=p2(a,b);
                if (c==1)
                    d=d+1;
                else if (c==2)
                    l=l+1;
                else
                    w=w+1;

                
            }
        else
            printf("잘못입력하셨습니다, 다시 입력해주세요\n");

        printf(">>>가위(1), 바위(2), 보(3) 입력(끝내려면 q): ");
        
    }
    printf("[종합 결과]\n승 수:%d\n패 수:%d\n무승부 수:%d\n",w,l,d);
    printf("종료!\n");
    
    return 0;   
    
    
}

int p1(void) //함수 2 컴퓨터 입력
{
    srand(time(NULL));
 
        int a;
        a=rand() % 3 + 1;
        if (a==1)
            printf("컴퓨터는 가위를 냈습니다.\n");
        else if (a==2)
            printf("컴퓨터는 바위를 냈습니다\n");
        else if (a==3)
            printf("컴퓨터는 보를 냈습니다.\n");
 
    return a;
}

int p2(int i,int j) //함수 3 승패 출력
{
    
    int s=0;
    
    if (i==j)
    {
        printf("무승부입니다.\n");
        s=1;
    }
    else if (i==1 && j==2)
    {
        printf("졌습니다.분발하세요.\n");
        s=2;
    }
    else if (i==1 && j==3)
    {
        printf("이겼습니다.축하합니다.\n");
        s=3;
    }
    else if (i==2 && j==1)
    {
        printf("이겼습니다.축하합니다.\n");
        s=3;
    }
    else if (i==2 && j==3)
    {
        printf("졌습니다.분발하세요.\n");
        s=2;
    }
    else if (i==3 && j==1)
    {
        printf("졌습니다.분발하세요.\n");
        s=2;
    }
    else if (i==3 && j==2)
    {
        printf("이겼습니다.축하합니다.\n");
        s=3;
    }

    return s;
}

 

 


 

 

간단한 프로그램 함수로 구현하기 15

 

 

슬롯머신 만들기

슬롯머신 게임 만들기: 마찬가지로 난수 발생 함수를 사용하여 3개의 숫자를 기반으로 하는 슬롯머신 프로그램을 만들어 보세요

@참고 사항

- 한 번의 게임에서 1~9 사이의 숫자 3개가 나온다.

이 숫자들의 조합에 따라 1등, 2 등, 3등, 4등이 결정되는데 각 등수에 대한 규칙은 스스로 결정한다.

예를 들어,

모두 7이 나오면 1등,

동일한 숫자 3개가 나오면 2등,

동일한 숫자 2개 가 나오면 3등,

이외에는 4등이 된다.

- 각 등수에 따라 배팅한 금액에 대한 배율이 결정되는데, 등수 별 배율도 각자 결정토록 한다.

예를 들어,

1등은 배팅 금액의 5배,

2등은 3배,

3등은 2배가 되며

4등은 배팅 금액 을 모두 잃게 된다.

- 프로그램 구현을 위해서 InputMoney 함수와 Run 함수를 만든다.

InputMoney 함수는 사용자로부터 금액을 입력받는다.

Run 함수는 해당 금액을 사용하여 슬롯머신 게임을 수행한다.

@실습 및 프로그래밍 절차

- 사용자 배팅 금액을 입력받는 InpuMoney 함수를 만든다.

해당 함수에서는 100원 미 만의 금액을 입력받도록 한다.

- Run 함수에서는 rand 함수를 사용하여 19 사이의 정수 3개를 생성하고,

규칙에 따 라서 등수 및 금액을 산출할 수 있도록 한다.

- main 함수에서는 InputMoney 함수와 Run 함수를 사용하여 슬롯머신 게임을 수행하며

사용자 입력에 따라 게임을 반복적으로 수행한다.

 

@실행 예

 

 

// 간단한 프로그램 만들기 2 (15번)

#include <stdio.h>
#include <ctype.h> // 입력받은 값이 숫자인지 판별하기 위해 isdigit() 쓰기위해 선언
#include <stdbool.h> // bool 형 true / false 쓰기 위해 선언
#include <stdlib.h>
#include <time.h>
int inputMoney (int won);
int run( int won);
int main(void)
{
    int money,cnt,temp,yn,lank,j;
    int num[3];


    yn = 1;
    lank = 0;

    
    while (true) // 게임실행 
    {
        printf(">>> 배팅 금액을 입력하세요 <100원 미만 가능> : ");
        scanf("%d",&money);
        inputMoney(money);
        // srand() 선언 (랜덤 숫자 받기)
        int i;
        srand(time(NULL));  // srand(time(NULL))를 통해 시드값(시간)을 변경한 후에는 실행마다 값이 변한다.
        yn  = run(money);
        if(yn == 1)
        {
            continue;
        }
        else
        {
            break;
        }
    }

    return 0;
}
int inputMoney(int won)
{
    while (true)
    {
        if ( won > 100)
        {
            printf(">>> 여기는 도박장이 아닙니다.\n");   
            printf(">>> 배팅 금액을 입력하세요<100원 미만 가능> : ");
            scanf("%d",&won);
            return inputMoney(won);
        }
        else if (won < 0 || won == 0)
        {   
            printf(">>> 다시 입력하세요.");
            printf(">>> 배팅 금액을 입력하세요<100원 미만 가능> : ");
            scanf("%d",&won);
            return inputMoney(won);
            
        }
        else
        {
            return won;
        }
    }
    
}
int run( int money)
{
    int i, j,temp,num[3],cnt,lank ,yn;

    for(i=0; i < 3; i++)
        {
            num[i] = rand() % 9 + 1; 
            //printf("%d | ",rand() % 9+1); // 1~9 연속된 수 출력
        }
        //printf("\n%ld\n",sizeof(num[0])); // int형 인지 확인

        printf(">>> 게임 결과 : %d %d %d\n",num[0],num[1],num[2]); // 게임결과
        temp = num[0];
        cnt = 0 ; // 같은숫자 count
        if (temp== num[1] && temp == num[2])
        {
        // printf("if문안 %d\n\n",temp);
            if(temp == 7)
            {
                lank=1;
                //printf("1등!!!\n");
                money = money * 5;
            }
            else
            {
                lank=2;
                //printf("2등!!");
                money = money * 3;
            }
        }
        else
        {
            for(i = 0 ; i < 3; i++)
            {
                for(j = 0 ; j<3; j++)
                {
                    if(i != j)
                    {
                        if(num[j] == num[i])
                        {
                            cnt += 1;
                            //printf("cnt 개수 :%d\n",cnt);
                        }
                    }
                }
            }
            if(cnt == 6)
            {
                lank = 2;
                //printf("2등");
                money = money * 3;
            }
            else if(cnt == 2)
            {
                lank=3;
                //printf("3등");
                money = money * 2;
            }
            else if(cnt == 0 || cnt == 1)
            {
                lank = 4;
                //printf("4등");
                money = 0;
            }
            //printf("cnt : %d\n\n",cnt);
        }
        printf(">>> 당신의 게임 등수는 %d등 입니다.\n",lank);
        printf(">>> 금액은 %d원 입니다.\n",money);
        printf("*게임을 계속 하시겠습니까? 예<1> 아니오<0> : \n");
        scanf("%d",&yn);
        return yn;
}

 

 


 

 

간단한 프로그램 함수로 구현하기 16

달력만들기

 

 

년월을 (원하는 방식으로) 입력받아

해당 년도와 월을 출력하세요.

 

 

* 윤년 계산하세요.

그레고리력의 윤년 규칙은 다음과 같습니다.

  • 서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. (1988년, 1992년, 1996년, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년, 2032년, 2036년, 2040년, 2044년 ...)
  • 서력 기원 연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년, 2300년, 2500년...)
  • 서력 기원 연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다. (2000년, 2400년...)

 

 

@실행 예

* 정렬 해서 깔끔하게 출력하세요.

 

 

*기원후 1년 1월 1일, 월요일

예) 입력: 1년 3월 달력을 보여줘

1월의 31일과 2월의 28일을 더하고, 일주일 7일로 나누면, 나머지 3(월,화,수)은 2월 마지막에 출력된 요일들입니다.

3월 1일을 출력하는 시작일은 나머지 3의 다음날인 (목요일)입니다.

 

// 달력만들기

#include <stdio.h>
// 윤년인지 판단하는 함수
int is_leap_year(int year)
{
    if((year % 4 == 0 && year % 100 != 0)  (year % 400 == 0))
    {
        return 1;
    }

    else
        return 0;
}

// 달력을 출력하는 함수
void print_calendar(int year, int month) 
{
    // 각 달의 일수를 설정.
    int month_day[] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    int total_days = 0;
    int first_day,day;

    // 기원후 1년부터 입력받은 연도 전까지의 총 일수를 계산.
    for (int y = 1; y < year; y++)
    {
        if ((y % 4 == 0 && y % 100 != 0)  (y % 400 == 0))
            total_days += 366;
        else
            total_days += 365;
    }

    // 입력받은 연도의 1월부터 입력받은 월 전까지의 총 일수를 더합니다.
    for (int m = 1; m < month; m++)
    {
        total_days += month_day[m - 1];
    }


    // 입력받은 월의 첫 날의 요일을 계산.
    // 기원후 1년 1월 1일이 월요일이므로 1을 기준으로 계산
    first_day = (total_days + 1) % 7;


    // 달력 출력
    printf("%d년 %d월\n", year, month);
    printf("----------------------------\n");
    printf(" Sun Mon Tue Wed Thu Fri Sat\n");
    printf("----------------------------\n");

    // 첫 날의 요일을 맞추기 위한 공백 출력
    for (int s = 0; s < first_day; s++)
        printf("    ");

    // 해당 월의 일수를 출력
    for (day = 1; day <= month_day[month - 1]; day++) 
    {
        printf("%3d ", day);

        // 줄 바꿈 조건
    if ((first_day + day) % 7 == 0) 
        printf("\n");
    }
    // 줄 바꿈 조건
    if ((first_day + day) % 7 == 0)
        printf("\n");  // 줄 바꿈

}


#include<stdio.h>
int main() {
    int year, month;

    // 사용자로부터 연도와 월을 입력받음
    printf("연도를 입력하세요: ");
    scanf("%d", &year);

    printf("월을 입력하세요: ");
    scanf("%d", &month);

    // 달력 출력
    print_calendar(year, month);

    return 0;
}

 

 

 


 

 

간단한 프로그램 함수로 구현하기 17

숫자 야구 만들기

 

 

방법은 개발자가 선택하세요.

입력받은 값은, 예외가 없도록 만들어 주세요.

 

 

게임을 시작하면, 컴퓨터가 랜덤한 숫자를 0~9 사이에 중복되지 않게 순서를 정해서 저장합니다.

매 라운드, 사용자에게 예상한 숫자 3개를 입력 받습니다.

사용자가 입력한 숫자와 랜덤한 숫자가 맞고, 입력 순서까지 맞으면 1strike,

사용자가 입력한 숫자와 랜덤한 숫자는 맞지만, 입력 순서가 맞지 않으면1ball,

숫자가 맞지 않고, 위치도 맞지 않으면 out

 

 

입력 후 결과에 대해 strike, ball, out 을 출력합니다.

9라운드까지 진행됩니다.

 

 

@실행 예

// 간단한 프로그램 만들기 2 (17번)
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>

int main()
{
    int num1,num2,num3,round,num[3];
    int base[3],base_num;
    int out_cnt, ball_cnt,str_cnt;
    int i,j;
    
    // 야구 숫자 중복제거
    int flag[10];
    srand(time(NULL));
 
    for (int i = 0; i < 3;)
    {
        int r = rand() % 9 + 1;
 
        if (flag[r])
            continue;
        base_num = rand() % 9 + 1;
        base[i] = base_num;
        flag[r] = 1;
        i++;
    }

    printf("0: %d\n",base[0]);
    printf("1: %d\n",base[1]);
    printf("2: %d\n",base[2]);

    // 라운드 실행
    round = 1;
     
    while(round < 10)
    {   
        printf("[%dround]\n",round);
        printf("Enter number 1~9 : ");
        scanf("%d",&num1);
        printf("Enter number 1~9 : ");
        scanf("%d",&num2);
        printf("Enter number 1~9 : ");
        scanf("%d",&num3);

        // 사용자 입력값 배열 저장
        num[0] = num1;
        num[1] = num2;
        num[2] = num3;
        out_cnt = 0;
        str_cnt = 0;
        ball_cnt = 0;

        for(i=0; i<3; i++)
        {
            for(j=0; j<3; j++)
            {
                if(base[i] != num[j])
                {
                    out_cnt += 1;
                }
                else if(i == j)
                {
                    if(base[i] == num[j])
                    {
                        str_cnt += 1;
                    }
                }
                else
                {
                    if(base[i] == num[j])
                    {
                        ball_cnt += 1;
                    }
                }
            }
        }
        if(str_cnt + ball_cnt == 0)
        {
            printf("[    out   ]\n");
        }
        else if(str_cnt == 3)
        {
            printf("========= Win =========\n");
            printf("정답입니다.\n");
            break;
        }
        else
        {
            //printf("Strike : %d\n",str_cnt);
            //printf("Ball : %d\n\n",ball_cnt);
            printf("[ Strike : %d, Ball : %d]\n",str_cnt,ball_cnt);
        }
        round += 1;
    }
    printf("게임 종료^^\n\n");
    return 0;

}



 

 

 


 

 

간단한 프로그램 함수로 구현하기 18

 

로또 키오스크 만들기

방법은 개발자가 선택하세요.

입력받은 값은, 예외가 없도록 만들어 주세요.

 

자동, 반자동, 수동 선택하세요.

최대 1~5개의 로또를 선택 하세요.

입금과 잔돈을 결재하고, 결재 결과로 영수증을 출력하세요

영수증에 발행일시(현재), 추첨일(해당 주 토요일), 지급기한(1년)을 출력하세요.

 

 

@실행 예

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define RESETTEXT "\x1B[0m" // Set all colors back to normal.
#define FOREMAG "\x1B[35m"  // Magenta
#define FORERED "\x1B[31m"  // Red
 
#define DAY_OF_WEEK_SIZE 7
const static char *DAY_OF_WEEK[DAY_OF_WEEK_SIZE] = {
    "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
void text();


int main(void)
{   
    
    int i,buy,mode,j,a1,a2,a3,a4,a5,a6,count;
    int lotto[i][6],ban,buy2;
     count=0;
    
    printf("-  -  -  -  Lotto  -  -  -  -\n");
    printf("system: 몇 개를 구매하시겠어요?\n");
    printf("입력 >>>");
    while (scanf("%d",&buy)==1)
    {
        if (buy<=5)
            break;
        else
        {   printf("system: (min)1 ~ (max)5개를 입력해주세요.\n");
            printf("system: 다시 입력해주세요.\n");
            printf("입력 >>>");
        }
        
    }
    printf("1.자동 2.반자동 3.수동\n"); 
    printf("입력 >>>");
    while (scanf("%d",&mode)==1)
    {
        if (mode==1)
        {
        printf("system: 1.자동을 선택하셨습니다.\n");
        text();
        
        
        
        srand(time(NULL));
        //////자동
        for(int i = 0; i < buy; i++)
        {
            for(int j = 0; j < 6; j++)
            printf("%2d | ", rand() % 44 + 1);
            printf("\n");
        }
        break;
        }
        //////반자동
       
        else if (mode==2)
        {   
            printf("system: 2.반자동을 선택하셨습니다.\n");
            
            for(int i = 0; i < buy; i++)
            {   
                printf("Lotto 1번 수동 입력 >>");
                scanf("%d",&a1);
                lotto[i][0]=a1;
                printf("Lotto 2번 수동 입력 >>");
                scanf("%d",&a2);
                lotto[i][1]=a2;
                printf("Lotto 3번 수동 입력 >>");
                scanf("%d",&a3);
                lotto[i][2]=a3;
                printf("Lotto 4번 수동 입력 >>");
                scanf("%d",&a4);
                lotto[i][3]=a4;
                printf("Lotto 5번 수동 입력 >>");
                scanf("%d",&a5);
                lotto[i][4]=a5;
                printf("Lotto 6번 수동 입력 >>");
                scanf("%d",&a6);
                lotto[i][5]=a6;
                printf("[0을 입력하시면, 나머지는 자동으로 입력됩니다.]\n");
                printf("계속 수동입력을 하실거면 아무 숫자나 눌러주십시오.");
                count=count+1;
                
                scanf("%d",&ban);
               
                if (ban==0)
                {   
                    
                    
                    for(int k = count; k < buy; k++)
                    {
                        
                        for(int j = 0; j < 6; j++)
                        {   
                           
                            lotto[k][j]=rand() % 44 + 1;
                            
                            
                        }
                        
                    }
                    break;
                
                }

                
            }
            
            text();
            
            for(int i = 0; i < buy; i++)
            {
                for (int j =0; j<6; j++)
                {
                    printf(" %2d |",lotto[i][j] );
                }
                printf("\n");

            }
                break;
        }
        ////수동
        else if (mode==3)
        {
            printf("system: 3.수동을 선택하셨습니다.\n");
            for(int i = 0; i < buy; i++)
            {   

                printf("Lotto 1번 수동 입력 >>");
                scanf("%d",&a1);
                lotto[i][0]=a1;
                // printf("%d",a1);
                printf("Lotto 2번 수동 입력 >>");
                scanf("%d",&a2);
                lotto[i][1]=a2;
                printf("Lotto 3번 수동 입력 >>");
                scanf("%d",&a3);
                lotto[i][2]=a3;
                printf("Lotto 4번 수동 입력 >>");
                scanf("%d",&a4);
                lotto[i][3]=a4;
                printf("Lotto 5번 수동 입력 >>");
                scanf("%d",&a5);
                lotto[i][4]=a5;
                printf("Lotto 6번 수동 입력 >>");
                scanf("%d",&a6);
                lotto[i][5]=a6;


                printf("\n");
            }
            
        text();
        for(int i = 0; i < buy; i++)
        {
            for (int j =0; j<6; j++)
            {
                printf(" %2d |",lotto[i][j] );
                
            }
            printf("\n");

        }
        
        
        break;

        }
        else
        {    
            printf("system: 잘못 입력하셨습니다.\n");
            printf("system: 1~3번을 선택해주세요.\n");
            printf("입력 >>>");
        }

    
    }

    return 0;
}

void text()
{
    time_t current;
        time(&current);
        struct tm *t = localtime(&current);

        printf("        💰 Lotto 6/45 💰");
        printf(FOREMAG);
        printf("\n");
        printf("발행일:");
        printf("%d", t->tm_year + 1900);
        printf("/");
        printf("%02d", t->tm_mon + 1);
        printf("/");
        printf("%02d", t->tm_mday);
        printf("(");
        printf("%s", DAY_OF_WEEK[t->tm_wday]);
        printf(") ");
        printf("%02d", t->tm_hour);
        printf(":");
        printf("%02d", t->tm_min);
        printf(":");
        printf("%02d", t->tm_sec);
        printf("\n");
        printf(RESETTEXT);
}

 

 

 


 

 

간단한 프로그램 함수로 구현하기 19

트리 만들기

 

https://youtube.com/shorts/UTUkjwar4II?si=XakQcFOHMysh8YK7

 

 

 


 

 

간단한 프로그램 함수로 구현하기 20

풍차 돌리기

(입력 없이 그냥 모양만 비슷하게 해도 됨, 출력 정렬 사용 안됨)

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

void clear_screen()
{
    printf("\e[1;1H\e[2J"); // ANSI escape code를 사용하여 터미널 화면을 지움
}

void p1(int i, int j,int n);
void p2(int n);

int main(void)
{
    int i, j, n;

    while (1)
    {
        clear_screen(); // 화면 지우기
        p1(i,j,n = 8);     // 첫 번째 함수 호출
        usleep(500000); // 0.5초 대기

        clear_screen(); // 화면 지우기
        p2(n = 8);    // 두 번째 함수 호출
        usleep(500000); // 0.5초 대기

        int count,x = 1;
        x = count + 1;
        count++;

        if (x == 5)
            break;
    }
}

void p1(int i, int j,int n)
{
    // 네번째 삼각형
    printf("\n\n");
    for (i = 0; i <= n; i++)
    {
        printf("      ");
        for (j = 0; j <= n; j++)
        {
            if (j >= i)
            {
                printf(" * ");
            }
            else
            {
                printf("   ");
            }
        }

        for (j = 0; j <= n; j++)
        {
            if (j >= n - i)
            {
                printf(" * ");
            }
            else
            {
                printf("   ");
            }
        }

        printf("\n");
    }

    // 세번째 삼각형
    for (i = 0; i <= n; i++)
    {
        printf("      ");
        for (j = 0; j <= n; j++)
        {
            if (j <= n - i)
            {
                printf(" * ");
            }
            else
            {
                printf("   ");
            }
        }

        for (j = 0; j <= n; j++)
        {
            if (j <= i)
            {
                printf(" * ");
            }
            else
            {
                printf("   ");
            }
        }

        printf("\n");
    }
}

void p2(int n)
{
    if (n % 2 != 0)
    {
        n = n - 1;
    }
    for (int i = 1; i <= n + 3; i++)
    {
        // (상부 절반-1) 부분
        if (i <= ((n + 3) / 2))
        {
            for (int j = 1; j <= n + 3; j++)
            {
                printf("   ");
            }
            for (int k = 1; k <= i; k++)
            {
                printf(" * ");
            }
            for (int l = (n + 2); l >= i; l--)
            {
                printf("   ");
            }
            printf("\n");
        }
        // 상부 나머지
        else
        {
            for (int j = (n + 3 - (2 * (i - ((n + 3) / 2)) - 1)) / 2; j >= 1; j--)
            {
                printf("   ");
            }
            for (int k = 1; k <= (2 * (i - ((n + 3) / 2)) - 1); k++)
            {
                printf(" * ");
            }
            for (int l = (n + 3 - (2 * (i - ((n + 3) / 2)) - 1)) / 2; l >= 1; l--)
            {
                printf("   ");
            }
            for (int m = (n + 3 - ((n + 3) / 2)); m >= (i - ((n + 3) / 2)); m--)
            {
                printf(" * ");
            }
            printf("\n");
        }
    }
    // 하부
    for (int i = 1; i <= n + 3; i++)
    {
        // 하부 윗부분 절반
        if (i <= ((n + 3) / 2 + 1))
        {
            for (int j = (n + 3 - i); j >= 1; j--)
            {
                printf("   ");
            }
            for (int k = 1; k <= i; k++)
            {
                printf(" * ");
            }
            for (int l = 1; l <= (i - 1); l++)
            {
                printf("   ");
            }
            for (int m = (n + 3 - (2 * i - 2)); m >= 1; m--)
            {
                printf(" * ");
            }
            printf("\n");
        }
        // 하부 나머지 부분
        else
        {
            for (int j = 1; j <= (i - 1); j++)
            {
                printf("   ");
            }
            for (int k = (n + 3 - i + 1); k >= 1; k--)
            {
                printf(" * ");
            }
            printf("\n");
        }
    }
}

 

 

 

 
728x90
반응형