アイデア:
一週間周囲黒矩形、本は別の配列を開き、グリッド最初に記録された時間が重複を避けるために、横方向出力のk次電池の出力開始位置、出力を使用して決定し、出力の垂直介して出力します出発細胞出力は重複を避けるために0に設定されています。
ACコード
フォーマットのprintf(「%3dは」)、デジタル出力を第3文字以下の場合に出力され、従って%3dとを出力することに注意してください
1の#include <stdio.hの> 2の#include < ストリング・H> 3 チャー [ 12 ] [ 12 ]。 4 INTの本[ 12 ] [ 12 ]。 5 INT メイン() 6 { 7 のint R、C、NUM = 1 。 8 一方(scanf関数(" %のD "、&R)== 1つの && R) 9 { 10 のscanf(" %dの"、&C) 11 GETCHAR(); // 改行食べる 12は INT = COUNT 。1、K = 0 、 13である 。// 最初の黒い長方形の外側の円、最初の行ように一般化することができる 14 のために(int型 I = 0 Iの<。 + R&LT 2 ; I ++ ) 15 { 16 A [I] [ 0 ] = ' * ' ; // 矩形の左側の垂直エッジ 17 A [I] [Cの+ 1 ] = ' * ' ; // 矩形の右垂直エッジ 18 } 19 用(INT J = 0 ; J <C + 2、J ++) // 最初の外円黒い四角形 20は 、{ 21である [ 0 ] [J] = ' * ' ; // 横長方形の側 22は、 [R&LT + 。1 ] [J] = ' * ' ; // 水平方向の長方形の側 23 } 24 // 入力 25 のために(INT I = 1 ; I <= R&LT; Iは、++は) // 入力 26は { 27 用(のInt J = 1。 ; J <= C; J ++ ) 28 { 29 scanfの(" %のC "、&A [I] [J]); 30 // 出発細胞数を決定 31である IF((([I] [J - 1 ] == ' * ')||([I - 。1 ] [J] == ' * '!))&& A [I] [J] = ' * ' ) 32 ブック[I] [ J] COUNT = ++ ; 33である } 34が GETCHAR(); // 食べ改行 35 } 36 であれば(!NUM = 1 ) 37 のprintf(" の\ n " ); 38 のprintf(" パズル#%dの:\ N "、NUM ++ ); 39 // 横向输出 40 のprintf(" \ nを越えました" ); 41 のために(int型 I = 1 ; I <= R iが++ ) 42 { 43 、K = 1 。 44 のために(INT J = K; J <= C; J ++ ) 45 { 46 であれば(ブック[I] [J] =!0 ) 47 { 48 のprintf(" %3D%C。" 、書籍[I]、[J]、[I] [J])。 49 K = J + 1 。 50 一方、((K)<= C && [I] [K] =!' * ' ) 51 { 52 のprintf(" %のC " 、[I] [K])。 53 K ++ 。 54 } 55 J =K; 56 のprintf(" の\ n " ); 57 } 58 } 59 } 60 のprintf(" ダウンの\ n " ); 61 のために(int型 I = 1 ; I <= R iが++ ) 62 { 63 、K = 1 。 64 のための(int型 J = 1 ; J <= C; J ++ ) 65 { 66 であれば(海外[I] [J] = 0 ) 67 { 68 のprintf(" %3D%のC。" 、書籍[I]、[J]、[I] [J])。 69 本は、[I] [J] = 0を。 70 K = I +は1 ; 71 一方、((K)<= R && [K] [J] =!' * ' ) 72 { 73 のprintf(" %のC " 、[k]を[J])。 74 本の[K] [j] = 0 ; 75 K ++ 。 76 77 } 78 のprintf(" の\ n " ); 79 } 80 } 81 } 82 } 83 84 戻り 0 ; 85 }