Untitled
unknown
plain_text
a year ago
2.7 kB
7
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