我想解决的问题是:
您将获得一个矩形蛋糕,表示为r×c网格。每个细胞都有一个邪恶的草莓,或者是空的。例如,3×4蛋糕可能如下所示:
蛋糕将要吃蛋糕!每次他吃东西,他都会选择一个不含任何邪恶草莓的行或一列,并且至少包含一个以前没有吃过的蛋糕细胞,并吃掉那里的所有蛋糕细胞。他可能会决定多次吃饭。
请输出cakeminator可以吃的最大蛋糕细胞数。
第一行输入包含两个整数r和c(2≤r,c≤10),表示蛋糕的行数和列数。接下来的r行每行包含c个字符 - 第i行的第j个字符表示第i行和第j行的单元格内容,并且是以下任何一个:
'' character表示没有邪恶草莓的蛋糕细胞;
'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')
错了,但我不知道原因。
答案 0 :(得分:0)
更正后的代码,更改通过&#34;&lt; --- change&#34;
通知#include <stdio.h>
int main(void) {
int r, c;
scanf("%d %d", &r, &c);
char cake[r][c]; <--- Change
int i, j, cnt=0, cou=0, a=0, b=0, cell=0;
//reject "\n" <--- Change
for(i=0;i<r;i++) {
for(j=0;j<c;j++) {
scanf("%c", &cake[i][j]);
}
<--- Change
}
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;
}
答案 1 :(得分:0)
我使用了char数组,并将每一行输入为字符串,这样可以在scanf()
扫描单个字符时节省输入。我还检查了条目(strg
允许的长度除外)
#include <stdio.h>
#include <string.h>
#define MAXIND 10
char cake[MAXIND][MAXIND+1];
char strg[100];
int main()
{
int numrows, numcols, row, col, emptyr=0, emptyc=0, cell;
scanf("%d %d", &numrows, &numcols);
if (numrows < 2 || numrows > MAXIND || numcols < 2 || numcols > MAXIND)
return; // bad cake size
// input each line
for (row=0; row<numrows; row++) {
scanf ("%s", strg);
strupr (strg);
strncpy (cake[row], strg, MAXIND);
}
// check each row
for (row=0; row<numrows; row++) {
for (col=0; col<numcols; col++)
if(cake[row][col]=='S')
break;
if (col == numcols)
emptyr++; // whole row is empty
}
// check each column
for (col=0; col<numcols; col++) {
for (row=0; row<numrows; row++)
if(cake[row][col]=='S')
break;
if (row == numrows)
emptyc++; // whole column is empty
}
// there are two ways to calculate
// each empty row lacks the number of empty columns
cell = emptyr*(numcols-emptyc) + emptyc*numrows;
printf("%d\n", cell);
// or each empty column lacks the number of empty rows
cell = emptyr*numcols + emptyc*(numrows-emptyr);
printf("%d\n", cell);
return 0;
}