P5831 求一致的奶牛的对数
思路:
设置两个二维数组,一个用来存储输入的值。在使用for循环进行遍历后,另一个用来存储对标第一行后每一行动态变化后的J的位置。再使用for循环和if语句进行位置的一致性的判断,最后手动释放动态内存。
错误总结:
1.输入时不要加\n
2.二维数组的动态分配,先分配行,再分配列
3.记得手动释放内存
# include <stdio.h>
# include <malloc.h>
int main()
{
int n, m, i, j, k, h;
int sum = 0;
scanf("%d %d", &n, &m);//输入不要加\n;
int ** a = (int **)malloc(sizeof(int *)*n);
int ** b = (int **)malloc(sizeof(int *)*n);//二维数组空间的分配,为行分配空间;
for (i=0; i<n; i++)
{
a[i] = (int *)malloc(sizeof(int)*m);//为每一列分配空间;
}
for (i=0; i<n; i++)
{
b[i] = (int *)malloc(sizeof(int)*m);//为每一列分配空间;
}
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
scanf("%d", &a[i][j]);
}
}
for (j=0; j<m; j++)
{
b[0][j] = j;
for (i=1; i<n; i++)
{
for (k=0; k<m; k++)
{
if (a[0][j] == a[i][k])
{
b[i][j] = k;
}
}
}
}
for (j=0; j<m; j++)
{
int cnt = 0;
for (h=j+1; h<m; h++)
{
for (i=0; i<n; i++)
{
if (b[i][j] < b[i][h])
{
cnt++;
}
if (cnt == n)
{
sum++;
}
}
cnt = 0;
}
}
printf ("%d", sum);
for (i=0; i<n; i++)
{
free(a[i]);
}
free(a);//手动释放动态内存;
for (i=0; i<n; i++)
{
free(b[i]);
}
free(b);
return 0;
}

浙公网安备 33010602011771号