我試圖解決的問題是:我的算法代碼有什麼問題?
給你一個長方形的蛋糕,作爲代表的R×C網格。每個細胞有一個邪惡的草莓,或者是空的。例如,一個3×4蛋糕可能看起來如下:
cakeminator會吃蛋糕!每次他吃東西時,他會選擇一行或一列不含任何邪惡的草莓,並且至少包含一個以前沒有吃過的蛋糕細胞,並在那裏吃掉所有的蛋糕細胞。他可能會決定吃任何次數。
請輸出cakeminator可以吃的蛋糕的最大數量。
第一行輸入包含兩個整數r和c(2≤r,c≤10),表示餅的行數和列數。接下來的r行分別包含c個字符 - 第i行的第j個字符表示第i行和j列單元格的內容,可以是以下任意一個:
'。'字符表示沒有邪惡草莓的蛋糕單元;
'S'字符表示帶有邪惡草莓的蛋糕細胞。
輸出結塊器可以吃的蛋糕的最大數量。
下面是應該產生8
樣本輸入:
3 4
S...
....
..S.
我的代碼給12
:
#include <stdio.h>
int main(void) {
int r, c;
scanf("%d %d", &r, &c);
int cake[r][c];
int i, j, cnt=0, cou=0, a=0, b=0, cell=0;
getchar(); //reject "\n"
for(i=0;i<r;i++) {
for(j=0;j<c;j++) {
scanf("%c", &cake[i][j]);
}
getchar();
}
// debug
// printf("%c\n", cake[0][0]);
// printf("%c\n", cake[0][1]);
// printf("%c\n", cake[0][2]);
// printf("%c\n", cake[0][3]);
// printf("%c\n", cake[2][2]);
for(i=0;i<r; i++) {
for(j=0;j<c;j++) {
cnt++;
if(cake[i][j]=='S') {
cnt=0;
break;
}
}
if(cnt>0) {
a++;
}
}
for(j=0;j<c;j++) {
for(i=0;i<r;i++) {
cou++;
if(cake[i][j]=='S') {
cou=0;
break;
}
}
if(cou>0) {
b++;
}
}
cell=cnt + cou - a*b;
printf("%d", cell);
return 0;
}
通過調試,我發現if(cake[i][j] == 'S')
是錯的,但我不知道原因。
cake [i] [j]正在存儲整數值。在比較之前將其轉換爲整數。 – 2014-10-28 11:27:13
將「for」循環格式化爲一行,您會發現代碼更容易閱讀 – thumbmunkeys 2014-10-28 11:28:03
@AlterMann - nope。它是一個字符而不是字符串。 – 2014-10-28 11:29:50