[英]Why is my program not printing the outputs for the specified input?
我有一個看起來像這樣的網格:
我的程序所做的是,它將計算是否獲得了徽章,如果為特定的輸入贏得了徽章,則將打印出是或否(輸入將是一個坐標為(x, y))。 但是由於某種原因,當我打印輸出時,我的程序僅針對陰影為黃色的區域進行計算。
在我的代碼中,我通過說出不在邊緣的盒子來說明:
if ((x >= 2 && x <= 19) && (y >= 2 && y <= 19))
但這似乎無法解決我的問題。 注意:如果輸入(x,y)不在區間[1,20]中,則我返回-1。
這是我打印結果時得到的:
如您所見,不在邊緣的字段中沒有顯示銀色徽章的輸出。 我只是似乎無法弄清楚為什么沒有計算/打印出不在邊緣的盒子。
注意:當字段贏得兩個或更多青銅徽章時,Poly徽章將返回“是”。
注意:如果出現以下情況,則“任意顏色”徽章將返回徽章:
一個字段獲得0個銅牌,並且如果所有相鄰字段都沒有獲得銅牌(相鄰字段包括西北,東北,西南和東南)
某場獲得1枚銅牌,其總得分(聲明為fieldScore)為20或更高。
一個字段獲得2個銅牌,並且至少滿足以下條件之一:該字段沒有任何利潤(聲明為fieldProfit),收獲時間少於80天(聲明為HarvestTime),或者其日照時間(聲明為sunExposure)大於其灌溉暴露量(聲明為灌溉暴露量)。
一個字段贏得3個或更多的青銅徽章,並且如果至少兩個直接鄰居贏得兩個或更多的青銅徽章。 (直接鄰居是北,南,東和西)。
這是我的兩個銀色徽章功能(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;
}
您的countBadges(x,y)函數在printf之前有一個return語句,因此printf將永遠不會打印。 您應該將其移至return之上,並在不需要時將其注釋掉。 您可能對printf有其他問題。
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;
printf("Total number: %d\n", countBadges(2, 2));
return total;
}
您經常檢查網格位置,因此我建議使用一個函數(或宏)ongrid(x,y),並使用它來檢查有效的網格邊界位置,
int ongrid(x,y)
{
return ( (x>=1) && (x<=20) && (y>=1) && (y<=20) );
}
您還應該檢查邊界條件,
if( y + 1<=20 )
northbadges = countBadges(x, y + 1);
if( x + 1<=20 && y + 1<=20 )
northeastbadges = countBadges(x + 1, y + 1);
if( x - 1>=1 && y + 1<=20 )
northwestbadges = countBadges(x - 1, y + 1);
if( x + 1<=20 )
eastbadges = countBadges(x + 1, y);
if( x - 1<=20 )
westbadges = countBadges(x - 1, y);
if( y - 1>=1 )
southbadges = countBadges(x, y - 1); //this value was probably not right
if( x + 1<=20 && y - 1>=1 )
southeastbadges = countBadges(x + 1, y - 1);
if( x - 1>=1 && y - 1>=1 )
southwestbadges = countBadges(x - 1, y - 1);
用ongrid()函數重寫以更加清楚,
if( ongrid(x,y + 1) )
northbadges = countBadges(x, y + 1);
if( ongrid(x + 1,y + 1) )
northeastbadges = countBadges(x + 1, y + 1);
if( ongrid(x - 1,y + 1) )
northwestbadges = countBadges(x - 1, y + 1);
if( ongrid(x + 1,y) )
eastbadges = countBadges(x + 1, y);
if( ongrid(x - 1,y) )
westbadges = countBadges(x - 1, y);
if( ongrid(x,y - 1) )
southbadges = countBadges(x, y - 1);
if( ongrid(x + 1,y - 1) )
southeastbadges = countBadges(x + 1, y - 1);
if( ongrid(x - 1,y - 1) )
southwestbadges = countBadges(x - 1, y - 1);
您的青銅徽章轉換聲明沒有默認值; 如果您使用的徽章數量與明確規定的數量不同,則需要處理默認設置,
default : {
break;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.