题目链接 http://hihocoder.com/contest/ntest2016spring1/problem/1

这个题目有几个算法考点:

(1)对于一个LED数码管(由7个发光二极管封装在一起,对应的二极管编号见所给链接),给你一串整数,每个数字表示对应的二极管亮,其他二极管明暗未知,由该串数据求出该数码管能表示出什么数字。

思路:就是将1~7数字(表示对应的二极管亮)映射到数组(vector<int>),表示哪些数字是需要该二极管灯亮。

map<int, vector<int>*> dic;
vector<int> v1 = { 2,3,5,6,7,8,9,0};//意思就是2,3,5,6,7,8,9这几个数字需要1号二极管亮!
vector<int> v2 = {4,5,6,8,9,0 };
vector<int> v3 = { 1,2,3,4,7,8,9,0 };
vector<int> v4 = {2,3,4,5,6,8,9};
vector<int> v5 = { 2,6,8,0 };
vector<int> v6 = { 1, 3, 4, 5, 6, 7,8,9,0 };
vector<int> v7 = { 2, 3, 5, 6, 8, 9, 0 };
dic[1] = &v1;
dic[2] = &v2;
dic[3] = &v3;
dic[4] = &v4;
dic[5] = &v5;
dic[6] = &v6;
dic[7] = &v7;

然后,利用哈希表map<int,int>来统计输入的数据串究竟能够表示出什么数字,需要求各个发光二极管所能表示的数字取交集,得到的就是该串LED数码管还能表示的数字。

(2)求给定一个正数N,和K个LED数码管,其中每个数码管可以表示出的数字是有限的,用vector<set<int>>存储,vector[0]这个数字集合就是第一个LED数码管所能表示的数字,并且第一个数码管对应最高位,整数N前面可以补零。求出数码管所能表示出的所有比N小的组合形式个数!(这个是题目的要求,将条件改为求所有小于等于N的组合形式个数,是不是要更复杂?自己将这个问题单独罗列出来,放到最下面去,构成问题3,同时自己将利用递归来实现这个函数)

下面是源代码(能通过题目已经给出的那个测试用例,其他还未知):

#include<iostream>
#include<vector>
#include<string.h>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
int main()
{ map<int, vector<int>*> dic;
vector<int> v1 = { ,,,,,,,};
vector<int> v2 = {,,,,, };
vector<int> v3 = { ,,,,,,, };
vector<int> v4 = {,,,,,,};
vector<int> v5 = { ,,, };
vector<int> v6 = { , , , , , ,,, };
vector<int> v7 = { , , , , , , };
dic[] = &v1;
dic[] = &v2;
dic[] = &v3;
dic[] = &v4;
dic[] = &v5;
dic[] = &v6;
dic[] = &v7; int len;//测试点个数
while (cin >> len && len != ){
//cin >> len;
for (int i = ; i < len; i++){
int K, N;
cin >> K >> N;
vector<set<int>> back(K,set<int>());
for (int j = ; j < K; j++){//处理K行数据
char str[];
vector<int> data;
cin.get();
cin.getline(str, , '\n');
for (int i = ; i < strlen(str); i++)//提取一行中的整数,保存到data当中,可以对其排序
{
if (str[i] != ' '){
int num = str[i] - '';
data.push_back(num);
}
}
sort(data.begin(), data.end());
map<int, int> inter;
for (int s1 = ; s1 < ; s1++){
inter[s1] = ;
}
inter[] = ;
for (int k = ; k < data.size(); k++){//将该二极管对应的备选数字添加到back中去,已经自动去重
vector<int>* ptr = dic[data[k]];
for (auto it = (*ptr).begin(); it != (*ptr).end(); it++){
inter[*it]++;
}
}
for (int s1 = ; s1 < ; s1++){
if (inter[s1] >= data.size())
back[j].insert(s1);
}
}//已经得到一个测试点的备选数字
vector<int> div;
for (int count = ; count < K; count++){
int temp = N % ;
div.push_back(temp);//div最前面是个位数字,back最前面是最左边的二极管对应最高位数字
N=N/;
}
int count = ;
for (int tag = ; tag < K; tag++){
auto it = back[tag];
int num = div[K - tag - ];
int count2 = ;
for (auto it2 = it.begin(); it2 != it.end(); it2++){
if (*it2 < num){
int sum = ;
for (int s1 = tag + ; s1 < K; s1++)
sum *= back[tag].size();
count += sum;
}
}
}
cout <<"结果:"<<count << endl;
}
}
return ;
}

(3)问题3

假定给自己一个数N,已经将其从最高位到最低位存储到了vector<int>val中(val[0]就是最高位),同时用vector<vector<int>>nums,来表示各个LED数码管能够表示的数字,求出所有LED数码管能表示出的小于等于N的数的总数量。函数接口 void helper(vector<vector<int>>& nums,vector<int>& val,int pos,int &count),

代码实现如下:

#include<iostream>
#include<string>
#include<vector>
using namespace std;
void helper(vector<vector<int>>& nums, vector<int>& val,int pos,int& count){
for (auto it = nums[pos].begin(); it != nums[pos].end();it++){
if (*it < val[pos]){
int count1 = ;
for (int i = pos + ; i < nums.size(); i++){
count1 = count1*nums[i].size();
}
count += count1;
}
else if (*it == val[pos]){
helper(nums, val, pos + , count);
}
}
}
int main()
{
vector<int> val = {,,};
vector<vector<int>> nums = { { , }, { , }, { , } };
int count = ;
int pos = ;
helper(nums, val, pos, count);
cout << "count=" << count << endl;
return ;
}

电子数字 网易游戏在线笔试 第一题 hihocoder的更多相关文章

  1. 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第一道——最佳路径

    题目 给定一个 n*m 的矩阵 A ,矩阵中每一个元素为一个十六进制数.寻找一条从左上角都右下角的路径,每次只能向右或者向下移动, 使得路径上所有数字之积在 16 进制下的后缀 0 最少. 输入描述: ...

  2. 今日头条 2018 AI Camp 6 月 2 日在线笔试编程题第一道——最大连续区间和扩展

    题目 给出一个长度为 n 的数组a1.a2.....ana1.a2.....an,请找出在所有连续区间 中,区间和最大同时这个区间 0 的个数小于等于 3 个,输出这个区间和. 输入描述: 第一行一个 ...

  3. unity,C#,游戏面试笔试真题

    最开始的两家公司笔试面试题目 一家公司是学校聘请研究教育方面VR课件的公司,面试没几天,就收到了面试通过的消息,后面因为通过了另一家游戏公司而拒绝了. 另一家公司是一家游戏外企,在春熙路,当时笔试还可 ...

  4. 今日头条 2018 AI Camp 6 月 2 日在线笔试编程题第二道——两数差的和

    题目 给 n 个实数 a_1, a_2 ... a_n, 要求计算这 n 个数两两之间差的绝对值下取整后的和是多少. 输入描述 第一行为一个正整数 n 和一个整数 m.接下来 n 行,第 i 行代表一 ...

  5. 18年今日头条笔试第一题题解:球迷(fans)

    其实本题是加强版,原数据是100*100的,老师为了尊重我们的智商加成了3000*3000并进行了字符串处理…… 上原题~ 球迷 [问题描述] 一个球场C的球迷看台可容纳M*N个球迷.官方想统计一共有 ...

  6. 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第二道——最小分割分数

    题目: 给 n 个正整数 a_1,…,a_n, 将 n 个数顺序排成一列后分割成 m 段,每一段的分数被记为这段内所有数的和,该次分割的分数被记为 m 段分数的最大值.问所有分割方案中分割分数的最小值 ...

  7. 金山网络2014春季Android实习生招聘-成都站-笔试第一题

    实现单例模式,并实现方法int getResult(float a),将a*8后返回. package jinshanwangluo.exam; /** * @author guoxm * @date ...

  8. Legendary Items-微软实习生笔试第一题

    题目如下: 这道题难点不仅在于正确理解题意,判断递归条件,更在于用数学方法推出解决公式.因为N最大为1百万,而内存只有256MB, 所以暴力递归肯定会超时,超空间. 不过,我才疏学浅,又没有大量时间去 ...

  9. 【面试笔试算法】Program 2:Amusing Digits(网易游戏笔试题)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 网易成立于1997年6月,是中国领先的互联网技术公司.其相继推出了门户网站.在线游戏.电子邮箱.在线教育.电子商务等多种服 ...

随机推荐

  1. C语言正则表达式详解 regcomp() regexec() regfree()详解

    标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库 ...

  2. linux查看系统类型和版本

    首先大致普及下linux系统的版本内容. 1.内核版本和发行版本区别 我的理解,内核版本就是指linux中最基层的代码,版本号如 Linux version 3.10.0-327.22.2.el7.x ...

  3. python 学习 第一课

    # -*- coding: utf-8 -*- import urllib2 import cookielib url="http://www.baidu.com" print ' ...

  4. C# 配置文件 AppSettings和ConnectionStrings的区别

      web.config是web应用程序的配置文件,为web应用程序提供相应配置(B/S).app.config是桌面应用程序的配置文件,为桌面应用程序提供相应配置(C/S).Configuratio ...

  5. hdu 1872(看病要排队)(优先队列)

    看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. Thailand vs Soros

    | exchange rate | | Thailand | Soros | |---------------+---------+----------+---------| | | orgin | ...

  7. 经典的找不到符号(symbol)错误 #iOS开发

    使用BmobSDK的过程中,编译时出现了以下错误信息,意思是 -[BmobSRWebSocket _innerPumpScanner] 这个方法引用了 "_utf8_nextCharSafe ...

  8. ArcMap中地图输出(Options)选项显示不完整

    首先,我开始遇到的时候,认为是高分辨屏幕的问题,所以修改了屏幕的分辨率,结果并没有改变. 然后,认为是对话窗口的显示,修改字体大小,也没有显示完整. 最后,是修改了ArcGIS的注册表才解决.解决方式 ...

  9. 寻找子域名的IP段

    校网网络安全检测,第一步,我们做的工作是找出学校所有的IP段.  当然,期间我们可以利用软件帮助我们扫描,但是一款软件往往是不够的,因为它全面,所以我们用了IISPutScanner,subDomai ...

  10. Bug集

    1. Spring MVC 双请求问题 viewresolver一定要放在servlet-dispatcher.xml里,否则会导致在请求成功后以后渲染页面,然后又发一次请求的状况,最后导致页面无法显 ...