记票统计 | 描述: | 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用“A”、”B”、”C”、”D”表示,选举时开始计票, 若输入的不是“A”、”B”、”C”、”D”则视为无效票。选举结束后获取各个候选人的得票数以及无效票的个数,输出结果以添加候选人的顺序进行顺序输出,最后一行为无效的数量。同时getVoteResult命令为结束命令。
| 运行时间限制: | 无限制 | 内存限制: | 无限制 | 输入: | 输入为多行形式输入,每一行为一条命令。输入的命令只会是有效命令不会有非法命令,但可能存在非法的投票,上面已经描述了。
添加候选人的命令如下:addCandidate为命令 xx1为候选人
addCandidate xx1
投票的命令如下:vote为命令 xx1为候选人的字符串
vote xx1
统计投票的命令如下:getVoteResult为命令
getVoteResult
| 输出: | 输出结果以添加候选人的顺序进行顺序输出,最后一行为无效的数量。
| 样例输入: | addCandidate xx1addCandidate xx2addCandidate xx3addCandidate xx4addCandidate xx5addCandidate xx6vote xx1vote xx3vote xx4vote xx1vote xx2vote xx7vote xx4vote xx5vote xx3vote xx2vote xx1vote xx7getVoteResult | 样例输出: | xx1 3xx2 2xx3 2xx4 2xx5 1xx6 02 |
#include<iostream>
#include<algorithm>
#include<map>
#include<string>
usingnamespace
std;
typedef pair<string,int>MyPair;
typedefmap<string,int>MyMap;
map<string,int>::iterator
iter;
int main()
{
int count=
0;
const string add=
"addCandidate";
const string vote=
"vote";
const string get=
"getVoteResult";
string cmdf;
MyMap mymap;
while(cmdf
!= get)
{
string cmdn;
string str;
cout<<
"请输入命令"<< endl;
cin>> cmdf;
if(cmdf
!= get)
cin>> cmdn;
if(cmdf
== add)
{
str.clear();
for(int
i=
0; i< cmdn.size();
i++)
{
str.push_back(cmdn[i]);
}
mymap.insert(make_pair(str,0));
}
elseif
(cmdf== vote)
{
str.clear();
for(int
i=
0; i< cmdn.size();
i++)
str.push_back(cmdn[i]);
iter= mymap.find(str);
if(iter
!= mymap.end())
iter->second++;
else
count++;
}
}
iter= mymap.begin();
while(iter
!= mymap.end())
{
cout << (*iter).first << " " << (*iter).second << endl;
iter++;
}
cout<<
"输错次数:"<< count
<< endl;
return0;
}
笨笨熊搬家交通篇 | 描述: | 森林里的苯苯熊要乔迁新喜,上次他已经将物品打包完成,并约了朋友来帮忙。接下来他要选定一个搬家的时间,想了很久,就决定在国庆节进行,因为国庆放假朋友们都有时间啦。但是在森林里,从他现在房子到新豪宅,所经之地有山有水,路途曲折,甚至有些道路是不通的。
请你和他一起查看指定的地图,看看从笨笨熊现在的房子到新宅之间,道路是否是畅通的呢?
地图是R行、C列的矩阵,矩阵的每一个格子刚好是一天的行程。
矩阵由“B”、“-”、“#”、“H”四种字符成员组成,其中:
B: 代表苯苯熊现在的房子;
H: 代表笨笨熊新的豪宅;
-: 代表可以通行的道路;
#: 代表无法通过的障碍(高山、大河等);
此外,森林里也有交通规则地:在任务位置,只能向“上、下、左、右”四个方向中的其中一个方向行走。
| 运行时间限制: | 无限制 | 内存限制: | 无限制 | 输入: | 4 // R的数值
4 // C的数值,下面是地图。
--##---
B-----H
#---#--
-------
| 输出: | Y //代表道路可达
或
N //代表道路不通
| 样例输入: | 15-B-H# | 样例输出: | Y | 答案提示: | |
这个题目开始想用回溯法做,用的时间较多,后来发现这种暴力破解法貌似更好,题目没有时间,内存的限制~
#include<iostream>
usingnamespace
std;
void old_Home(char**m,int
x,int y,int&
a,int& b)//获取B的坐标
{
for(int
i=
0; i< x; i++)
{
for(int
j=
0; j< y; j++)
{
if(m[i][j]==
'B')
{
a= i;
b= j;
}
}
}
}
bool find_Home(char**m,int
x,int y,int
a,int b)
{
if((a
>= 0)&&
(a< x)&&
(b>=
0)&&
(b< y))
{
if(m[a][b]==
'H')
returntrue;
if(m[a][b]==
'#')
returnfalse;
if((m[a][b]==
'-')||
(m[a][b]==
'B'))
{
m[a][b]=
'#';
return(find_Home(m,
x, y, a
+ 1, b)||
find_Home(m,
x, y, a-
1, b)||
find_Home(m,
x, y, a, b+
1)||
find_Home(m,
x, y, a, b-
1));
}
}
else
returnfalse;
}
voidInit(char*
p,int x,int
y)//输入矩阵
{
for(int
i=
0; i< x
; i++)
{
cin>> p;
p+= y;
}
}
int _tmain(int
argc, _TCHAR* argv[])
{
int x,
y,a
= 0,b=
0;
cin>> x;
cin>> y;
char** m=
newchar*[x];
char* p=
newchar[x*y+1];
for(int
i=
0; i< x; i++)
m[i]=
p + i*y;
Init(p,
x, y);
old_Home(m,
x, y, a, b);
if(find_Home(m,
x, y, a, b))
cout<<
"Y"<< endl;
else
cout<<
"N"<< endl;
delete[] p;
return0;
}
3.
好友关系管理 | 描述: | 现有一个社交网站,其好友推荐策略为:用户A和用户B不是好友,当二人的共同好友数量超过好友推荐阈值m时,就向A和B分别推荐为彼此好友。
本题任务为:对设定的m值,给定一组用户及各自好友列表,对这一组用户,反复自动应用上述好友推荐策略后(假设每次推荐都被采纳),求指定用户的最终好友列表。
注:好友关系是双向的,即:如果用户A是用户B的好友,那么用户B一定也是用户A的好友。
写一个程序,在社交网络中实现:
1)初始化社交网络
2)创建用户
3)增加指定两个用户之间的好友关系
4)反复自动应用好友推荐策略后,获取某个用户的好友数量
5)反复自动应用好友推荐策略后,判断某两个用户间是否存在好友关系
说明:
1、一个用户有且只有一个名字,且不存在重名
2、自己和自己不存在好友关系
3、用户名字大小写敏感
4、用户名字字符串长度范围为[1..20]
5、用户总数小于100个
| 运行时间限制: | 无限制 | 内存限制: | 无限制 | 输入: | 五个整数,好友推荐阈值P,创建用户数量m,增加指定两个用户之间的好友关系数量M,查询某个用户的好友数量n,查询指定两个用户是否是好友N字符串,每个数据一行,按到上面的顺序依次输入数据,共m+M+n+N行字符串
字符串,每个一行,共m+M+n+N行字符串
| 输出: | 输出用户的好友数量,共n个,每个一行;如果用户不存在,输出-1,否则输出好友数量。样例中的用户Jack、Peter、Tom的好友数量都是2个。
输出指定两个用户是否是好友,共N个,每个一行,如果是输出0,否则输出-1。样例中的用户Jack与Peter、Peter与Tom、Jack与Tom都是好友关系,所有输出0。
| 样例输入: | 2 3 3 3 3JackPeterTomJack PeterPeter TomJack TomJackPeterTomJack PeterPeter TomJack Tom | 样例输出: | 222000 | | | 匿名评论(隐身草)
|