题目描述
小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块。因为它比较古老,所以规则和一般的俄罗斯方块不同。
荧幕上一共有 n 列,每次都会有一个 1 x 1 的方块随机落下,在同一列中,后落下的方块会叠在先前的方块之上,当一整行方块都被占满时,这一行会被消去,并得到1分。
有一天,小易又开了一局游戏,当玩到第 m 个方块落下时他觉得太无聊就关掉了,小易希望你告诉他这局游戏他获得的分数。
输入描述:
第一行两个数 n, m
第二行 m 个数,c1, c2, … , cm , ci 表示第 i 个方块落在第几列
其中 1 <= n, m <= 1000, 1 <= ci <= n
输出描述:
小易这局游戏获得的分数
示例1
输入
3 9
1 1 2 2 2 3 1 2 3
输出
2
思考
-
第二行输入怎么表示?
用map吗? 思考后还是用 vector 输入 -
如何表示得分(如何表示占满一行) ?
个人思考:
统计第二行输入中,1,2, 3到 m 的个数,最小的就是所求得分。
不足:时间复杂度高
代码实现
初次实现
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n,m,score,c;
cin >>n >> m;
vector <int> C;
for(int i=0;i<m;i++)
{
cin >> c;
C.push_back(c);
}
int num1,num2,num3;
num1 = count(C.begin(),C.end(),1);
num2 = count(C.begin(),C.end(),2);
num3 = count(C.begin(),C.end(),3);
score = min(min(num1,num2),num3);
return 0;
}
int num1,num2,num3;
num1 = count(C.begin(),C.end(),1);
num2 = count(C.begin(),C.end(),2);
num3 = count(C.begin(),C.end(),3);
score = min(min(num1,num2),num3);
代码错误。 m个方块,不能从num1,num2, 统计到numm。
第二次实现
#include <iostream>
#include <vector>
int minv(vector <int> v)
{
int min;
min = v[0];
for(int i=0;i<v.size();i++)
{
if(v[i]<min)
min = v[i];
}
return min;
}
int main()
{
/* 输入n,m*/
int n, m,c; /* n 表示列,m表示块数,c 表示落下块的位置*/
cin >> n >> m;
/* 输入落下的块*/
vector <int> v(n,0); /* n列 */
for (int i=0;i<v.size();i++)
{
cin >> c;
v[c - 1]++;
}
/* 找出最小的vector的元素值*/
cout << minv(v);
return 0;
}
问题:
主函数里 for (int i=0;i<v.size();i++) 终止条件是 i < m;
#include <iostream>
#include <vector>
using namespace std;
int minv(vector <int> v)
{
int min;
min = v[0];
for(int i = 0; i < v.size(); i++)
{
if (v[i] < min)
min = v[i];
}
return min;
}
int main()
{
/* 输入n,m*/
int n, m,c; /* n 表示列,m表示块数,c 表示落下块的位置*/
cin >> n >> m;
/* 输入落下的块*/
vector <int> v(n,0); /* n列 */
for (int i=0;i<m;i++)
{
cin >> c;
v[c - 1]++;
}
/* 找出最小的vector的元素值*/
cout << minv(v);
return 0;
}
收获
1. vector 作为函数参数怎么使用?
function1(std::vector< int > vec),传值
function2(std::vector< int >& vec),传引用
function3(std::vector< int >* vec),传指针
注意,三种方式分别有对应的const形式,不在此讨论。
三种方式对应的调用形式分别为:
function1(vec),传入值
function2(vec),传入引用
function3(&vec),传入地址
2、vector 作为函数参数怎么使用
vector 作为函数参数怎么用
3、vector 元素使用
vector[索引];例如: v[0]; 索引为0的值
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体