Untitled

 avatar
unknown
plain_text
5 months ago
2.7 kB
6
Indexable
//14468 - Big orange cat's puzzle III  
//(1.)baganono 怎麼判斷輸出
//(2.)怎麼算方法數

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int n, m, k, p;
    int puzzle_hand[12] = {0};
    int puzzle_table[12][12] = {0};
    int value[12] = {0};
    int flag[12] = {0};

    scanf("%d %d %d %d", &n, &m, &k, &p);

    for(int i = 1;i<=k;i++)
    {
        scanf("%d", &puzzle_hand[i]);
        flag[i] = 0;//尚未使用
    }

    for(int i = 1;i<=n;i++)
    {
        for(int j = 1;j<=m;j++)
        {
            scanf("%d", &puzzle_table[i][j]);
        }
    }

    for(int i = 1;i<=n;i++)
    {
        scanf("%d", &value[i]);
    }


    for(int row = 1;row<=n;row++)
    {
        int row_total = 0;
        int chose_row = 0;//要在裡面重新初始化
        int chose_column = 0;

        //找出-1的位置 以及 除了-1以外的總和
        for(int column = 1;column<=m;column++)
        {
            if(puzzle_table[row][column] == -1)//找位置
            {
                chose_row = row;
                chose_column = column;
            }
            else//找總和
            {
                row_total += puzzle_table[row][column];
            }
        }

        //printf("chose_row : %d\n", chose_row);
        //printf("chose_column : %d\n", chose_column);
        //printf("row_total : %d\n", row_total);

        int diff = 1000, is_used = -5;
        for(int i = 1;i<=n;i++)//範圍(value值)
        {
            for(int j = 1;j<=k;j++)//手牌(puzzle_hand值)
            {
                //判斷相加後的值是否在範圍內
                if((row_total+puzzle_hand[j]) <= (value[i]+p) && (row_total+puzzle_hand[j]) >= (value[i]-p))
                {
                    //判斷是否為最小且尚未使用過
                    if(puzzle_hand[j] < diff && flag[j] == 0)
                    {
                        diff = puzzle_hand[j];
                        puzzle_table[chose_row][chose_column] = puzzle_hand[j];
                        is_used = j;
                        //printf("is_used : %d\n", is_used);
                    }
                }
            }
        }

        if(is_used == -5)
        {
            printf("baganono\n");
            break;
        }

        flag[is_used] = 1;//用過就改為1

    }


    for(int row = 1;row<=n;row++)
    {
        for(int column = 1;column<=m;column++)
        {
            if(column == m)
                printf("%d\n", puzzle_table[row][column]);
            else
                printf("%d ", puzzle_table[row][column]);
        }
    }

    return 0;
}


Editor is loading...
Leave a Comment