先发一下问题描述
当时我求解思路是,求3A+3B=count,后来看了直播思路和其他人对的代码发现思路没问题,问题出在了代码
然后这是我调试好的一个代码,这个代码题目的两个样例都能完美运行,自己试的几个也可以,但是试过一次n=3,m=30,k=2,三行110000000000000000000000000000的情况答案是错的,是-4和6,这个代码本来是按着c写的,结果忘了可以用字符串,二位数组有变量c里面没法运行,我是在c++环境里运行的这个代码
代码如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
int n=0;
int m=0;
int k=0;
int i=0;
int j=0;
int count =0;
int A=0;
int B=0;
scanf("%d %d %d",&n,&m,&k);
int arr[n][m]={0};
int arr1[n]={0};
for(i=0;i<n;i++)
{
scanf("%d",&arr1[i]);
}
for(i=0;i<n;i++)
{
int tmp=0;
tmp=arr1[i];
for(j=m-1;j>=0;j--)
{
arr[i][j]=tmp%10;
tmp=tmp/10;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(arr[i][j]==1)
{
count++;
}
}
}
A=count-2*k;
B=k-A;
printf("%d %d",A,B);
return 0;
}
还有一个是用一维数组写的c,也是没有用字符串,用的除和模求的1的个数,我在中间打印数值试过,问题就处在了计算count的for循环体中,导致计算出不来count的值,但具体问题出在了哪里找不到,另外这个代码如果在devc++里面编译,会在输入每行数值时在第二次输入将k的值置为你输入的值,但是在蓝桥杯提交程序中不会有这个情况
代码如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
int n=0;
int m=0;
int k=0;
int i=0;
int j=0;
int count =0;
int A=0;
int B=0;
scanf("%d %d %d",&n,&m,&k);
int arr[]={0};
while(i<n)
{
scanf("%d",&arr[i]);
i++;
}
for(i=0;i<n;i++)
{
int tmp=0;
tmp=arr[i];
for(j=0;j<m;j++)
{
int tmpl=0;
tmpl=tmp%10;
tmp=tmp/10;
if(tmpl==1)
{
count++;
}
}
}
printf("%d\n",count);
A=count-2*k;
B=k-A;
printf("%d %d",A,B);
return 0;
}
下面是我在解析里找的一个用c写的正确的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
int n,m,k,cnt=0,a,b;
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<=n;i++)
{
char c[1000001];
scanf("%s",c);
for(int j=0;j<m;j++)
{
if (c[j]=='1') cnt+=1;
// printf("%d ",cnt);
}
}
a = cnt-2*k;
b = k-a;
printf("%d %d",a,b);
return 0;
}