百度编程大赛试题----数7 加强版游戏(C++算法实现)
2012-06-28 10:03
375 查看
转载请标明是引用于 http://blog.csdn.net/chenyujing1234
欢迎大家提出意见,一起讨论!
“叉烧鸡翅膀,我呀最爱吃!……”
百度spider组的“黑龙潭之行”在烤着鸡翅,唱着星爷的经典时达到高潮。大家在篝火旁围成一圈,开始玩“数7”加强版游戏,规则如下:
规则1:遇7的倍数或含7的数时pass。
规则2:遇有包含相同数字的数时pass。注意相同数字不必相邻。例如121。
数错的惩罚很残酷——吞食烤全羊。为避免惩罚,百度工程师们需要你——史上最强程序员的帮助。百度工程师想知道:
req1 x:符合规则1的第x个数是什么?
req2 y:符合规则2的第y个数是什么?
req12 z:同时符合规则1、2的第z个数是什么?
query n:数n是规则1中的第几个数,是规则2中的第几个数?
输入格式
输入的每一行为一个查询,由一个查询词和一个无符号整型数组成。共有四种查询,查询词分别为req1、req2、req12、query(区分大小写)。
输出格式
前三种查询输出一个无符号整型的解。对于“query n”的查询,若n是规则中的数则输出相应的解,否则输出-1。
输入样例 例
req1 10
req2 10
req12 10
query 14
输出样例 例
11
10
12
-1 13
评分规则
程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过1秒,否则该用例不得分;
要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;
该题目共有10个测试数据集,其中数据1~5主要考查正确性,满足x,y,z,n<=1000;输入6~10主要考查时间效率,满足x<=10,000,000,y<=1,000,000,z<=240,000,n<=20,000,000。数据1和6只包含req1,数据2和7只包含req2,数据3和8只包含req12,数据4和7只包含query,数据5和10包含全部四种查询。每组数据都恰好包含100个查询。
该题目20分。
欢迎大家提出意见,一起讨论!
一、题目
2.大话西游与数字游戏“叉烧鸡翅膀,我呀最爱吃!……”
百度spider组的“黑龙潭之行”在烤着鸡翅,唱着星爷的经典时达到高潮。大家在篝火旁围成一圈,开始玩“数7”加强版游戏,规则如下:
规则1:遇7的倍数或含7的数时pass。
规则2:遇有包含相同数字的数时pass。注意相同数字不必相邻。例如121。
数错的惩罚很残酷——吞食烤全羊。为避免惩罚,百度工程师们需要你——史上最强程序员的帮助。百度工程师想知道:
req1 x:符合规则1的第x个数是什么?
req2 y:符合规则2的第y个数是什么?
req12 z:同时符合规则1、2的第z个数是什么?
query n:数n是规则1中的第几个数,是规则2中的第几个数?
输入格式
输入的每一行为一个查询,由一个查询词和一个无符号整型数组成。共有四种查询,查询词分别为req1、req2、req12、query(区分大小写)。
输出格式
前三种查询输出一个无符号整型的解。对于“query n”的查询,若n是规则中的数则输出相应的解,否则输出-1。
输入样例 例
req1 10
req2 10
req12 10
query 14
输出样例 例
11
10
12
-1 13
评分规则
程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过1秒,否则该用例不得分;
要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;
该题目共有10个测试数据集,其中数据1~5主要考查正确性,满足x,y,z,n<=1000;输入6~10主要考查时间效率,满足x<=10,000,000,y<=1,000,000,z<=240,000,n<=20,000,000。数据1和6只包含req1,数据2和7只包含req2,数据3和8只包含req12,数据4和7只包含query,数据5和10包含全部四种查询。每组数据都恰好包含100个查询。
该题目20分。
二、C++算法实现
#include <stdio.h> #include <vector> #include <iostream> #include <deque> #include <string> #include <math.h> using namespace std; bool IsContain7(int nData) { int nRec = nData%10; if (nRec == 7) { return true; } while (nData/10 > 0) { nData = nData/10; if (nData%10 == 7) { return true; } } return false; } int Req1(int nData) { int nResult = 0; int nCount = 0; int nUpBound = 7*nData; //不会超过7倍 for (int i = 6; i <= nUpBound; i ++) { if ((i % 7 == 0)||IsContain7(i)) { nCount ++; } if (nCount == nData) { return i; } } } bool IsRepeat(int nData) { vector<int> Number; while (int(nData) >0) { int nUint = nData%10; nData = nData/10; for (int i = 0; i < Number.size(); i ++) { if (nUint == Number[i]) { return true; } } Number.push_back(nUint); } return false; } int Req2(int nData) { int nResult = 0; int nUpBound = 11*nData; int nCount = 0; for (int i = 11; i <= nUpBound; i ++) { bool bResult = IsRepeat(i); if (bResult) { nCount ++; } if (nCount == nData) { return i; } } } int Req12(int nData) { int nResult = 0; int nCount = 0; int nUpBound = 7*nData; //不会超过7倍 for (int i = 6; i <= nUpBound; i ++) { if ((i % 7 == 0)||IsContain7(i) || IsRepeat(i)) { nCount ++; } if (nCount == nData) { return i; } } return nResult; } void Query(int nData, int * nPos1, int *nPos2) { int nResult = 0; int nNum = nData/7 + 1; if ((nData % 7 != 0)&& !IsContain7(nData) && !IsRepeat(nData)) { *nPos2 = -1; *nPos1 = -1; } vector<int> nData7; for (int i = 1; i < nNum; i ++) { int nData1 = Req1(i); nData7.push_back(nData1); if (nData1 == nData) { *nPos1 = i; } } int nNum2 = nData/11 + 1; vector<int> nData11; for (int j = 1; j < nNum2; j ++) { int nData2 = Req2(j); nData11.push_back(nData2); if (nData2 == nData) { *nPos2 = j; } } } int main() { const int nNum = 4; string str; int nData = 0; int nCount = 0; string str1[nNum] = {"req1", "req2", "req12", "query"}; int nData1[nNum] = {10, 10, 10, 14}; // for (int j = 0; j < nNum; j ++) // { // cin>>str; // cin>>nData; // str1[j] = str; // nData1[j] = nData; // } for (int i = 0; i < nNum; i ++) { str = str1[i]; nData = nData1[i]; if ( str == "req1") { long nResult = Req1(nData); printf("%ld\n",nResult); } else if(str == "req2") { long nResult = Req2(nData); printf("%ld\n",nResult); } else if (str == "req12") { long nResult = Req12(nData); printf("%ld\n",nResult); } else if (str == "query") { nCount ++; int nPos1 = 0; int nPos2 = 0; Query(nData,&nPos1,&nPos2); if (!nPos1) { nPos1 = -1; } if (!nPos2) { nPos2 = -1; } printf("%ld %ld\n",nPos1,nPos2); } else { printf("Input Error!\n"); } } system("pause"); }
相关文章推荐
- 百度编程大赛试题----类似九格宫(C++算法实现)
- 编程马拉松大赛试题及代码(C++实现)
- 编程马拉松大赛试题及代码(C++实现)
- 百度编程大赛试题(C/C++)
- J2me网络编程以及网络游戏的实现
- 6、Cocos2d-X 游戏编程之------CCEditBox的实现
- 2013华为杯编程大赛成都第三组试题--------C 连连看-判断两个图案是否可以消去
- php解:百度之星2009程序设计大赛 初赛第一场试题--------火柴游戏
- c语言编程 :模拟实现简单扫雷游戏
- 2013华为杯编程大赛成都第三组试题及答案
- 7、Cocos2d-X 游戏编程之------CCControlSwitch的实现
- 【 2013华为杯编程大赛成都第三组前两题试题及答案】
- 游戏编程常用TGA图像格式详解以及加载纹理编程实现
- HTML5+javascriptOO编程思想的写法实现键盘游戏
- C编程之旅:猜数字游戏的简单实现
- CodeM美团点评编程大赛复赛 A.配对游戏【思维+Dp】好题~
- 百度编程大赛的9宫图代码及解析
- shell编程大赛试题
- 编程实现贪吃蛇游戏界面的主要代码