Untitled
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