我的任务是: “输入:m,n 该程序获得n个字符,仅在m行中包含“ W”和“ B”。 输出:如果每列中的“ W”数量相等,则返回“ B”,否则返回“ F”。
注意:我们不允许使用数组!
示例: 输入:
3 2
WBW
BBW
输出:
FBB
我的代码:
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++)
{
str = 0;
for(int j=1;j<=n+1;j++)
{
scanf("%c",&c);
if(c=='W')
str = str*1000+1;
else
str = str*1000;
}//end of getting characters
sumstr += str;
}//end of getting lines
//Reversing the "sumstr"
while(sumstr>0)
{
a = sumstr%1000;
reverse = (reverse+a)*1000;
sumstr/=1000;
}
reverse/=1000;
for(int k =1;k<=n;k++)
{
a=reverse%1000;
if(a%2==0)
printf("B");
else
printf("F");
reverse /= 1000;
}//End of printing 'B' and 'F'
答案 0 :(得分:2)
您的代码中有几项有问题,包括诸如提示用户输入scanf("%d %d",&n,&m);
之类的内容。这将无法处理用户输入附带的空白。
这些不是硬性规定,只是一些建议:
(随后是示例代码以及用户输入和临时数据存储的替代方法。)
rows
cols
比
m
n
)例如:
int main(void)
{
char str[4];
int chr;
int rows, cols;
int i, j;
char sDataConv[][2] = { "W", "B" };
printf("Enter number of rows: ");
if(fgets(str, 4, stdin))
{
rows = atoi(str);
}
printf("Enter number of columns: ");
if(fgets(str, 4, stdin))
{
cols = atoi(str);
}
int array[rows][cols];//read data in as char values such as 'W' and 'B'
memset(array, 0, sizeof(array));
//Now a loop can be used prompting user
//to enter values, and placing values
//into array as they are entered, eg using
// array[i][j] = getc(stdin);
// if((array[i][j] == 'W') || (array[i][j] == 'B'))
for(i = 0; i<rows; i++)
{
for(j = 0;j<cols;j++)
{
printf("Enter either W or B one at a time");
if(fgets(str, 4, stdin))
{
array[i][j] = str[0];
//test - limit to allow only W or B
while(!((array[i][j] == 'W') || (array[i][j] == 'B')))
{
printf("Wrong entry, enter either W or B.");
if(fgets(str, 4, stdin))
{
array[i][j] = str[0];
}
}
}
}
}
//display data entered
for(i = 0; i<rows; i++)
{
for(j = 0;j<cols;j++)
{
printf("%c ", array[i][j]);
}
printf("\n");
}
return 0;
}
这应该提供一个开始。其余的取决于您,但是数组应该可以帮助进行比较并显示结果。