说这么长,其实在妾身理解看来,实际上题目的要求很简单,就是统计0到L-1,这L个数,在一个n×m的二维数组中分别出现的次数。
不得不说,要想从实际问题中抽象分析出来模型,再根据模型求解,最终用来解决实际问题,还是很不容易的噻。
下面是小女子第一次想的解决方法,并写的代码。
#include<iostream>
using namespace std;
int main()
{
int n, m, L;
cin >> n >> m >> L;
int arr[501][501] = { 0 };
int a[257] = { 0 };//标记数组,记录0到L-1各出现几次
int i, j, k;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
cin >> arr[i][j];
}
}
for (k = 0; k < L; k++)
{
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if (k == arr[i][j])
{
a[k] = a[k] + 1;//统计出现次数
}
}
}
}
for (i = 0; i < L; i++)
{
cout << a[i] << " ";
}
system("pause");
return 0;
}
还出现了三次循环,诶呀妾身真的好笨呀!要是数据多一点,可能就过不了了。
后来妾身再次想了想,又想出了一个可以优化一点的方法(才不会告诉公子是学习了别人的方法呢 )。
#include<iostream>
using namespace std;
int main()
{
int n, m, L;
cin >> n >> m >> L;
int tem;
int a[257] = { 0 };//标记数组,记录0到L-1各出现几次
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
cin >> tem;
a[tem]++;
}
}
for (i = 0; i < L; i++)
{
cout << a[i] << " ";
}
system("pause");
return 0;
}
一对比,才发现原来妾身真的好笨呀!看来学习的道路上还有好长的路要走呢!