次のようなグリッドがあります。
私のプログラムが行うことは、バッジが獲得されたかどうかを計算し、バッジが獲得されたかどうかを特定の入力 (入力は座標 (x、 y)))。しかし、何らかの理由で、出力を印刷しようとすると、私のプログラムは黄色の網掛け部分のみを計算しています。
私のコードでは、次のように言って、端にないボックスを説明しました。
if ((x >= 2 && x <= 19) && (y >= 2 && y <= 19))
しかし、これは私の問題を解決していないようです。注: 入力 (x, y) が区間 [1, 20] にない場合、-1 を返します。
結果を印刷すると、次のようになります。
ご覧のとおり、エッジにないフィールドのシルバー バッジの出力は表示されません。端にないボックスが計算/印刷されない理由がわかりません。
注:フィールドが 2 つ以上のブロンズ バッジを獲得した場合、Poly バッジは「はい」を返します。
注: Any Color バッジは、次の場合にバッジを返します。
フィールドは 0 個のブロンズ バッジを獲得し、隣接するすべてのフィールドがブロンズ バッジを獲得しない場合 (隣接するフィールドには北西、北東、南西、南東が含まれます)
フィールドは 1 つのブロンズ バッジを獲得し、フィールド全体のスコア (fieldScore として宣言) は 20 以上です。
畑は 2 つのブロンズ バッジを獲得し、次の少なくとも 1 つに該当します: 畑が利益をもたらさない (fieldProfit として宣言)、収穫までに 80 日未満しかかからない (harvestTime として宣言)、または太陽への露出 (として宣言) sunExposure) は、その灌漑露出 (irrigationExposure として宣言) よりも大きいです。
フィールドは 3 つ以上のブロンズ バッジを獲得し、少なくとも 2 つの隣接するフィールドが 2 つ以上のブロンズ バッジを獲得します。(直接隣接するのは北、南、東、西です)。
2 つのシルバー バッジ関数 (Poly バッジと Any Color バッジ) のコードは次のとおりです。
int countBadges(int x, int y) {
int mavebadge, incirclebadge, herobadge, weatherbadge, inquattrobadge,
total;
mavebadge = badgeBoundaryMaven(x, y);
incirclebadge = badgeInnerCircle(x, y);
herobadge = badgeLocalHero(x, y);
weatherbadge = badgeBoringWeather(x, y);
inquattrobadge = badgeInQuattro(x, y);
total = mavebadge + incirclebadge + herobadge + weatherbadge +
inquattrobadge;
return total;
printf("Total number: %d\n", countBadges(2, 2));
}
int badgePoly(int x, int y) {
int bronzebadges, polybadge;
if ((x >= 1 && x <= 20) && (y >= 1 && y <= 20)) {
bronzebadges = countBadges(x, y);
if (bronzebadges >= 2) {
polybadge = 1;
}
else {
polybadge = 0;
}
}
else {
polybadge = -1;
}
return polybadge;
}
int badgeAnyColor(int x, int y) {
int bronzebadges, northbadges, northeastbadges, northwestbadges, eastbadges,
westbadges, southbadges, southeastbadges, southwestbadges, colorbadge;
double fs, ht, fp, sunexp, irrexp;
if ((x >= 1 && x <= 20) && (y >= 1 && y <= 20)) {
fs = fieldScore(x, y);
ht = harvestTime(x, y);
fp = fieldProfit(x, y);
sunexp = sunExposure(x, y);
irrexp = irrigationExposure(x, y);
bronzebadges = countBadges(x, y);
northbadges = countBadges(x, y + 1);
northeastbadges = countBadges(x + 1, y + 1);
northwestbadges = countBadges(x - 1, y + 1);
eastbadges = countBadges(x + 1, y);
westbadges = countBadges(x - 1, y);
southbadges = countBadges(x - 1, y - 1);
southeastbadges = countBadges(x + 1, y - 1);
southwestbadges = countBadges(x - 1, y - 1);
switch (bronzebadges) {
case 0: {
if (x == 1 && y == 1){
if (northbadges == 0 && northeastbadges == 0 &&
eastbadges == 0){
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if (x == 20 && y == 1) {
if (northbadges == 0 && northwestbadges == 0 &&
westbadges == 0) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if (x == 1 && y == 20) {
if (eastbadges == 0 && southeastbadges == 0 &&
southbadges == 0) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if (x == 20 && y == 20) {
if (westbadges == 0 && southwestbadges == 0 &&
southbadges == 0) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if ((x >= 2 && x <= 19) && (y == 1)) {
if (westbadges == 0 && northwestbadges == 0 && northbadges == 0
&& northeastbadges == 0 && eastbadges == 0) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if ((x >= 2 && x <= 19) && (y == 20)) {
if (westbadges == 0 && southwestbadges == 0 && southbadges == 0
&& southeastbadges == 0 && eastbadges == 0) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if ((x == 20) && (y >= 2 && y <= 19)) {
if (northbadges == 0 && northwestbadges == 0 &&
westbadges == 0) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if ((x == 1) && (y >= 2 && y <= 19)) {
if (northbadges == 0 && northeastbadges == 0 && eastbadges == 0
&& southeastbadges == 0 && southbadges == 0) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if ((x >= 2 && x <= 19) && (y >= 2 && y <= 19)) {
if (northbadges == 0 && northwestbadges == 0 && westbadges == 0
&& southwestbadges == 0 && southbadges == 0 &&
southeastbadges == 0 && eastbadges == 0 &&
northeastbadges == 0) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
break;
}
case 1: {
if (fs >= 20) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
break;
}
case 2: {
if (fp <= 0 || ht < 80 || sunexp > irrexp) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
break;
}
case 3:
case 4:
case 5: {
if ((x >= 2 && x <= 19) && y == 1) {
if (((westbadges + northbadges) >= 2) || ((northbadges +
eastbadges) >= 2) || ((westbadges + eastbadges) >= 2)) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if (x == 1 && y == 1) {
if ((northbadges + eastbadges) >= 2) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if (x == 20 && y == 1) {
if ((northbadges + westbadges) >= 2) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if (x == 1 && y == 20) {
if ((southbadges + eastbadges) >= 2) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if (x == 20 && y == 20) {
if ((southbadges + westbadges) >= 2) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if ((x >= 2 && x <= 19) && y == 20) {
if (((westbadges + southbadges) >= 2) || ((southbadges +
eastbadges) >= 2) || ((westbadges + eastbadges) >= 2)) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if ((x == 1) && (y >= 2 && y <= 19)) {
if (((northbadges + eastbadges) >= 2) || ((eastbadges +
southbadges) >= 2) || ((northbadges + southbadges) >= 2)) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if ((x == 20) && (y >= 2 && y <= 19)) {
if (((northbadges + westbadges) >= 2) || ((westbadges +
southbadges) >= 2) || ((northbadges + southbadges) >= 2)) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
if ((x >= 2 && x <= 19) && (y >= 2 && y <= 19)) {
if (((northbadges + westbadges) >= 2) || ((westbadges +
southbadges) >= 2) || ((southbadges + eastbadges) >= 2) ||
((northbadges + southbadges) >= 2) || ((westbadges +
eastbadges) >= 2)) {
colorbadge = 1;
}
else {
colorbadge = 0;
}
}
break;
}
}
}
else {
colorbadge = -1;
}
return colorbadge;
}