




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一题结果填空3 奖券数目有些人很迷信数字,比如带“ 4”的数字,认为和“死”谐音,就觉得不吉利。虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10-99 ),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。请提交该数字(一个整数),不要写任何多余的内容或说明性文字。题解:考试的时候写了个回溯法,然后屁颠屁颠的开始做下面一题了。结果错了t1 #i nclude <iostream>2 using namespace std;3 bool fuck( int t)4 5 while (t)6 7
2、if (t% 10 =4) return false ;8 t/=10;9 10 return true ;11 12 int main()13 14 int ans =0, t=10;15 while (t<100)16 if (fuck(t+)ans+;17 cout«a ns<<e ndl;19 第一题正确答案:52488 (我居然上来第一题就错了居然写了 13440)cout<<8*9*9*9*9;t t第二题结果填空5 星系炸弹在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。每个炸弹都可以设定多少天之后爆炸。比如:阿尔法炸
3、弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。 有一个贝塔炸弹,2014年11月9日放置,定时为1天,请你计算它爆炸的准确日期。请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19请严格按照格式书写。不能出现其它文字或符号。题解:不用废话,直接手算顶多3分钟,注意2016是闰年正确答案:2017-08-05第三题结果填空9 三羊献瑞观察下面的加法算式:+ 三羊献瑞三羊生瑞气(如果有对齐问题,可以参看【图l.jpg】)其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。请你填写“三羊献瑞”所代表的4位数字(答案唯一),不
4、要填写任何多余内容。题解:水题,给“祥瑞生辉三羊献气”编号,直接回溯穷举即可1 #i nclude <iostream>2 using namespace std;3 inta 8;4 boolb 10;5 voiddfs( intcur)6 7 if (cur =8)8 9 int x = a 0* 1+a 1* 100+a 2* 10+a 3,y = a 4* 1+a 5* 100 +a 6* 10 +a 1, z=a4* 10+a 5* 1+a 2* 100 +a 1* 10+a 7;10 if (x+y=z)cout<<a4<<a 5<<
5、a 6<<a 1 <<endl;11 12 else13 14for ( int i =0; i <10; i+)151617if (cur =if (cur =0&& =4&&i =18if 何)1920bi=1;21acur=i;22dfs(cur+1);23bi=0;242526 27 28 intmai n()29 30 dfs(0);31return 0;0) continue0) continue32 第三题正确答案:1085第四题代码填空11 格子中输出StringlnGrid 函数会在一个指定大小的格子中打印指定的字
6、符串。要求字符串在水平、垂直两个方向上都居中。如果字符串太长,就截断。如果不能恰好居中,可以稍稍偏左或者偏上一点。下面的程序实现这个逻辑,请填写划线部分缺少的代码。1 #in elude <stdio.h>#in clude < stri ng .h>void StringlnGrid(int width, int height,con stchar * s)6inti, k;7charbuf 1;8strcpy(buf, s);9if (strlen(s)>width -1011printf("+");12for(i =0; i<wid
7、th -13printf("+n");1415for(k =1; k<(height -1617printf("");18for (i =0; i<width -19printf("n");202122printf("");2324printf("%*s%s%*s",填空2526printf("n");2728for(k = (height -1) /52) bufwidth -2; i+) pr intf(2 + 1; kvheight -1) /2; k+)2
8、; i+) pri ntf(2="-");II0;);1; k+).);/2930pri ntf("");31for(i =0; ivwidth -2; i+) printf("");32pri ntf("n");333435pri ntf("+");36for (i =0; i<width -2; i+) printf("-");37pri ntf("+n");38 3940 int mai n()41 42Stri ngl nGrid(20, 6
9、, "abcd1234");43return0;44 对于题目中数据,应该输出:+abcd1234+(如果出现对齐问题,参看【图1.jpg】)注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。题解:我是一名 01党,入门直接学的是 C+,结果考了个printf里面%*s的用法。太特么冷门了,穷举了没试出来,原来后面的参数要跟两个。分数11分怒丢正确答案:(width-strle n(s)-2)/2,"",s,(width-strle n(s)-1)/2,""备注:答案可以形式多样性,只要代入使得代码成立即可,但要注意奇偶问
10、题所以后面一个要+1不然sample过了也是错的第五题代码填空13 九数组分数123.9这九个数字组成一个分数,其值恰好为1/3,如何组法?下面的程序实现了该功能,请填写划线部分缺失的代码。1 #in clude <stdio.h>22 void test( int x)3 5inta = x 0 *1 + x1 *100 + x2 * 10+ x3;6intb = x 4 *10 + x5 *1 + x6* 100+ x7 *10 + x 8;78if(a *3 = b) pri ntf("%d / %dn",a, b);9 1010 void f( int
11、x, int k)11 12 int i, t;13 if (k >=9)1516test(x);17return ;181920for (i = k; i<9; i+)2122t = xk; xk = xi; xi = t; 23f(x, k +1);24/填空处2526 2728 intmai n()29 30int x = 1, 2, 3, 4, 5, 6, 7, 8, 9 ;31f(x,0);32return 0;33 注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。题解:水题,回溯法的最最基本常识,全局变量回溯完成后必须更改回初值正确答案:t=xk; xk=
12、xi; xi=t;备注:1.答案可以形式多样性,只要代入使得代码成立即可2我个人认为一个横线可以填多个语句,所以去掉大括号,或者利用原有t值少写一句子no problem第六题结果填空17 加法变乘法我们都知道:1+2+3+ . + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如:1+2+3+.+10*11+12+.+27*28+29+.+49 = 2015就是符合要求的答案。请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10 )。注意:需要你提交的是一个整数,不要填写任何多余的内容。题解:水题,一共是 48个位置,C(
13、48,2)扣掉连在一起的情况,穷举一遍过即可。1 #i nclude <iostream>2 using namespace std;3 intmai n()4 5for(int i =1;i <47; i+)6for(int j = i +2; j <49; j+)7 8int sum =0;9for (int k =1; k < i; k+)sum+=k;10sum+=i*(i+1);11for ( intk = i+2; k < j; k+)sum+=k;12sum+=j*(j+1);13for ( intk = j+2; k <50; k+)s
14、um+=k;14if (sum= 2015 )cout<<i<<endl;1516return 0;17 第六题正确答案:16第七题结果填空21 牌型种数小明被劫持到X赌城,被迫与其他 3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?请填写该整数,不要填写任何多余的内容或说明文字。题解:水题,一共是记号为A,2,3,4,5,6,7,8,9,10,J,Q,k 的十三个元素,每个元素的情况可能是0,1,2,3
15、,4。这十三个元素的和为13即可。回溯穷举再剪枝即可。1 #i nclude <iostream>2 using namespace std;3 int ans =0, sum =0;456789101112131415161718192021222324252627void dfs( int cur)if (sum> 13) return ;if (cur =13)if (sum =13 )a ns+;return ;else5; i+)for ( int i =0; i <sum += i;dfs(cur +1);sum -= i;int mai n()dfs( 0
16、);cout << ans << en dl;return 0;第七题 正确答案:第八题程序设计15 移动距离X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为 6时,开始情形如下:1 234 5 612 11 109 8 713 14 15 我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)输入为3个整数w m n,空格分开,都在 1到10范围内w为排号宽度,m,n为待计算的楼号。要求输出一个整数,表示 m n两楼间最短移动距离。例如:用户输
17、入:6 8 2则,程序应该输出:4再例如:用户输入:4 7 20则,程序应该输出:5资源约定:峰值内存消耗 < 256MCPU 消耗 < 1ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入”的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:main函数需要返回0注意:只使用ANSI C/ANSI C+ 标准,不要调用依赖于编译环境或操作系统的特殊函数。注意:所有依赖的函数必须明确地在源文件中#inelude <xxx>,不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。题解:从分值上都能看出来是水题。比前面两个填空题的
18、分值都低。最简单的做法,小学生都会的,用数论的完全剩余系,我们强行更改矩阵的编号比如题目中的强行更改为:01234511 109 87612 13 14这样就算起来非常方便了,要求的答案就是坐标之差#in clude <iostream>#in clude <cmath>using namespace std;int mai n()int w,m,n;cin> >w>> m»n;m-; n-;int m1=m/w, m2=m%w;if (ml &1)m2=w- 1 -m2;int n1=n/w, n2=n%w;if (n1&am
19、p; 1 )n2=w- 1-n2;cout<<abs(m1- n1)+abs(m2-n 2)<<e ndl; return 0;第八题第九题程序设计25 垒骰子赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!我们先来规范一下骰子:1的对面是4 , 2的对面是 5,3的对面是6。假设有m组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。atm想计算一下有多少种不同的可能的垒骰子方式。两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应
20、数字的朝向都相同。由于方案数可能过多,请输出模10A9 + 7 的结果。不要小看了atm的骰子数量哦输入格式第一行两个整数 n mn表示骰子数目接下来m行,每行两个整数 a b,表示a和b数字不能紧贴在一起。输出格式一行一个数,表示答案模10A9 + 7 的结果。样例输入2 11 2样例输出544数据范围对于30% 的数据:n <= 5对于60% 的数据:n <= 100对于 100% 的数据:0 < n <= 10人9, m <= 36资源约定:峰值内存消耗 < 256MCPU 消耗 < 2ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入”的
21、多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:main函数需要返回0注意:只使用ANSI C/ANSI C+ 标准,不要调用依赖于编译环境或操作系统的特殊函数。注意:所有依赖的函数必须明确地在源文件中#inelude <xxx> ,不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。题解:终于不是水题了,然而却没全做出来。难度跳跃太大。考场上,我先用dfs做,结果数字大于5的时间就hold不住了,于是果断改成记忆化动态规划,但是只能到一万,实在没办法了。大神跟我说用矩阵快速幕做,所以现在立马现学现用。程序有空补。【考场程序】讲解:利用记忆
22、化DP穷举底面衔接的所有情况,dppq表示第p层底面是q的情况种数,侧面是相互独立的最后乘以4M即可比如提给数据就是 34再乘上两个4。但是上限1实在是达不到了。1 #i nclude <iostream>2 #inelude <cstring>3#defi ne N10074us ingnamiespace std;5/考场上我用的map< in t,i nt>现在想想发现多余了6int o7=0, 4, 5, 6,1, 2, 3 ;7bool fuck77;8int n,m;9longlongans :=0;10constintmaxin =25;11l
23、onglongdpmax n7;12longlongdfs(int cur,int p)13 14if (cur = n)return 1;15else1617if (dpcurp >=0) returndpcurp;18long longt =0;19for ( inti =1; i <7; i+)2021if (fuckiop)continue ;22t += dfs(cur +1, i);23t %= N;2425retur n dpcurp = t;2627 28 iintmai n()29 30memset(dp,-1, sizeof (dp);31cin >>
24、; n >> m;32for ( inti =0; i < m; i+)3334int t1, t2;35cin >> t1 >> t2;36fuckt1t2=1;37fuckt2t1=1;3839for ( inti =1; i <7; i+)4041an s+=dfs(1, i);42ans %= N;4344for (int i =0; i < n; i+)4546ans *=4;47ans %= N;4849eout << ans << en dl;50return 0;51 考场程序,数据不够大所以要扣分,
25、最大只能到10【AC版本】:矩阵快速幕同理我们只考虑底面的情况,最后乘上45即可。a、第n层数字为ba和b能连则为1,比如题给的1 2我们设六阶矩阵 An,其中An的第a行第b列表示第一层底面数字为的所有排列的情况记六阶矩阵X中,第a行第b列表示相邻两层的是否能成功连接的情况。a和b不能连则为0 (注意是相邻两层的底面,不是衔接面,所以要转化,要改为1 5)根据上述定义,易得递推式:An = A n-lX,且 Al = E (六阶单位矩阵)可得到An的表达式为 An = X n-1那么ans就是矩阵Xn-1的36个元素之和注意最后侧面的45也要二分幕不然会爆炸1 #in elude <i
26、ostream> 2 #inelude <cstring>#defi neN 1007using namespace std;struct Matrixlong long a 6 6;Matrix( int x)memset(a,0, sizeof (a);for ( int i =0; i <6; i+) aii = x;Matrix & q)Matrix operator *( const Matrix& p, constMatrix ret(0);for ( inti =0; ii <6; i+)for ( int j =0; j <6
27、; j+)for ( intk =0; k <6; k+)ret.aij += p.aik * q.akj;ret.aij %= N;return ret;int t)Matrix fast_mod(Matrix x, Matrix ret(1);34567891011121314151617181920212223242526272829303132while (t)333435363738394041424344454647484950515253545556575859606162if (t &1 )ret = x*ret;x = x*x;t >>=1;retu
28、rn ret;int mai n()Matrix z(0);for ( int i =0; i <6; i+)for ( int j =0; j <6; j+)z.aij =1;int m, n;cin >> n >> m;for (int i =0; i < m; i+)int t1, t2;cin >> t1 >> t2;z.at1 -z.at2 -Matrix ret(1(t2 +2) % 6 =0;1(t1 +2) % 6 =0;ret = fast_mod(z, n -1);long long ans =0;for (
29、 int i =0; i <6; i+)63for ( int j =0; j <6; j+)6465ans += ret.aij;66ans %= N;6768 69long long p =4;70while (n)7172if (n &1)7374ans *= p;75ans %= N;7677p *= p;78p %= N;79n >>=1;80 81 cout << ans << en dl;82return 0;83 矩阵快速幕第十题程序设计31 生命之树在X森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点
30、)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列a, v1, v2,vk, b 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。在这个前提下,上帝要使得 S中的点所对应的整数的和尽量大。这个最大的和就是上帝给生命之树的评分。经过atm的努力,他已经知道了上帝给每棵树上每个节点上的整数。但是由于atm 不擅长计算,他不知道怎样有效的求评分。他需要你为他写一个程序来计算一棵树的分数。输入格式第一行一个整数 n表示这棵树有 n个节点。第二行n个整数,依次表示每个节点的评分。接下来n-1行,每行2个
31、整数u, v ,表示存在一条 u到v的边。由于这是一棵树,所 以是不存在环的。输出格式输出一行一个数,表示上帝给这棵树的分数。样例输入51 -2 -3 4 54 23 11 22 5样例输出8数据范围对于30% 的数据,n <= 10对于100% 的数据,0 < n <= 10A5,每个节点的评分的绝对值不超过10A6 。资源约定:峰值内存消耗 < 256MCPU 消耗 < 3ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入”的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:main函数需要返回0注意:只使用ANSI C/ANSI
32、C+ 标准,不要调用依赖于编译环境或操作系统的特殊函数。注意:所有依赖的函数必须明确地在源文件中#inelude <xxx> ,不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。题解:没有系统的学过树和图,不知道什么方法,我精通的只有floyd,所以考场上只想去骗30%的数据。n最大就是10,考场的时候我直接穷举了点集的所有子集,最多就是1024种情况,判断是否连通,连通的话算出来,可惜时间不够差了一点。所以拿了0分【考场程序】详解:二进制法子集生成穷举给定n,用二进制法做出集合0,1,2,n-1的2n-1个非空子集,然后去判断每个子集是否是连通树的一部分,权值
33、再求和即可。#defi ne DEBUG#in clude <iostream>#in clude <cstri ng>#in clude <vector>usingnamespace std;const int maxn =105;int n;int vermax n;bool arcmaxnmaxn;vectorv int > vv;long long ans = -1007 ;void subset( int s)vv.clear();for (int i =0; i < n; i+)if (s&( 1 << i) vv
34、.push_back(i);int len = vv.size(), t =0;for (int i =0; i < len; i+)for (int j =0; j < len; j+)2345678910111213141516171819202122232425262728if (arcvvivvj)t+;293031323334353637383940414243444546474849505152535455565758if (t /2 != len -1) returnlong long sum =0;for ( int i =0; i < len; i+)sum
35、 += vervvi;if (sum>ans)ans = sum;int mai n()#ifdef DEBUG#pragma warning(disable:4996)freopen("d:input.txt", "r" , stdin);/freopen("d:output.txt", "w", stdout);#en dif0, sizeof(ver);0, sizeof(arc);memset(ver, memset(arc, cin >> n;for (int i =0; i <
36、n; i+)cin >> veri;for ( int i =0; i < n -1; i+)int temp1, temp2;cin >> temp1 >> temp2;arctemp1 -1temp2 -1 = truearctemp2 -1temp1 -1 = truefor ( int i =1; i < (1 <<n); i+)5960subset(i);6162cout << ans << en dl;63return 0;64 考场程序,n只要20出头就爆炸了,只能拿 30%多的分数【AC版本(二
37、叉链表)】树形 dp详解:题目给出的树是邻接表的构造法,这里用二叉链表表示二叉树,因此需要用dfs求出这棵树的扩展前序遍历来构造树。树建立完成后,用经典的树形dp求出答案即可。1 #defi ne DEBUG2 #include<iostream>3 #include<vector>4 #include<algorithm>5 usingnamespace std;66 const int maxn =105;7 vectorv int > preorder;8 int pre =0;9 int valuemax n;10 vectorv int &g
38、t; arcmaxn;1211 void build()12 151617181920212223242526272829303132333435363738394041424344int num;cin >> n um;for (int i =0; i < n um; i+)cin >> valuei;int temp1, temp2;for (int i =1; i < n um; i+)cin >> temp1 >> temp2;arc-temp1.push_back(-temp2); arctemp2.push_back(te
39、mp1);last)con ti nuevoid dfs_preorder( int root, intpreorder.push_back(root);int len = arcroot.size();for (int i =0; i < len; i+)if (arcrooti = last) dfs_preorder(arcrooti, root);if (root = last) len+;for (int i = len; i <3; i+)preorder.push_back(-1);4546474849505152535455565758596061626364656
40、66768697071727374struct TreeNodeint val;TreeNode *left;TreeNode *right;TreeNode( int x) : val(x), left(NULL), right(NULL) ;TreeNode* creat(TreeNode *bt)int v = preorderpre+;if (v = - 1)bt = NULL;elsebt =new TreeNode(valuev);bt->left = creat(bt->left);bt->right = creat(bt->right);return b
41、t;/递归求一个结点到另一个结点的路径上的最大和class Soluti onpublic :long long tmp;int maxPathSum(TreeNode *root)/如果没有子树则最大值就是自己if (root = NULL)75/结点空返回76return 0;7778tmp = root->val;/tmp 存放结点路径数值79MaxSubTree(root);/递归80return tmp;818283int MaxSubTree (TreeNode* subtree)84/求解子树85long long root = subtree->val;/递归时将根
42、结点放在子树的第-个结点上86long long left =0, right =0;/左右两个递归子树的sum均初始为087if (subtree->left != NULL)88/当结点不为空时89left = MaxSubTree(subtree->left);/继续递归90tmp = tmp > left ? tmp : left;9192if (subtree->right != NULL)93/同上94right = MaxSubTree(subtree->right);95tmp = tmp > right ? tmp : right;9697
43、long long Lsum = root + left;/递归至空时,将左子树和101tmp = max(tmp, MaxTmp);结点相加作为左边总和98longlongRsum = root + right;/右边总和99longlongSUM = root + left + right;/总和100longlongMaxTmp = max(max(max(Lsum, Rsum), SUM), root);/考虑负数的情况102 return MaxTmp;103 104 ;105105 int main()106 107 #ifdef DEBUG108 #pragma warning(disable:4996)109 freopen("D:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 说课课件模板卡通
- 2025企业产品代理销售合同模板
- 2025《设备租赁合同》补充协议书
- 2025科技公司与员工合同范本
- 2025中级会计师知识点《合同解除、违约责任》
- 2025代理合同样本
- 诗词鉴赏炼字课件
- 红绿灯识别知识培训内容课件
- 红海盐度高的原因
- 红楼梦课件图
- 项目部刻章申请书
- 版挖掘机租赁合同
- 语言学概论全套教学课件
- JJF 1265-2022生物计量术语及定义
- GB/T 8118-2010电弧焊机通用技术条件
- GB/T 17421.7-2016机床检验通则第7部分:回转轴线的几何精度
- 电工技能测试
- 药事管理学全套课件
- 社区心理学课件
- 质量整改通知单(样板)
- 2020届高三北京高考“多文本阅读”总攻略
评论
0/150
提交评论