1、 a = 9; a+)for(b = 0; b b+)for(c = 0; c c+)for(d = 0; d d+)for(e = 0; e e+)if(a != 4 & b ! c ! d ! e !=4)count+;coutcountendl;return 0;输出为: 52488第2题:计算1千天后的日期2014-11-09再过1000天是哪一日?我想这里题目,对于大家来说分析的时候难点就在于那年是闰年,那年是平年那么从2014到2017年之间2016年是闰年,因此这一年就是365天,这道题,我是手算的。答案是: 2017-08-05重点是要按照格式提交。第3题:竖式加法祥 瑞 生
2、辉 三 羊 献 瑞 ?三 羊 生 瑞 气 题目用了8个不同的汉字,表示09里八种不同的数字。组成两个数值相加,等于第三个数值。求三羊献瑞”对应到数字是多少?第一种暴力搜索:我假设结果中进位的是1,那么三对应的就是数字1.接下来定义变量。 a b c d+ 1 e f b-1 e c b g这段代码输三个结果,把每个结果带进去试一下就知道那个是了。int a, b, c, d, e, f, g;for(f = 0; f f+)for(g = 0; g g+)if(a * 1000 + b * 100 + c * 10 + d) + (1000 + e * 100 + f * 10 + b) =
3、(10000 + e * 1000 + c * 100 + b * 10 + g)= 1 & f != 1)= b & a != c &= d &=e &= f &= g &= e &= g)1 * 1000 + e * 100 + f * 10 + bint a10;for(int i = 0; i i+)ai = i;doif(!a2 | !a6)continue;int x = a2 * 1000 + a3 * 100 + a4 * 10 + a5;int y = a6 * 1000 + a7 * 100 + a8 * 10 + a3; int z = a6 * 10000 + a7 *
4、 1000 + a4 * 100 + a3 * 10 + a9;if(x + y = z)cout yint main() char s100 = abcd1234 char buf1000; int width = 20; strcpy(buf, s); bufwidth-2 = 0; printf(|%*s%s%*s|n, (width-strlen(buf)-2)/2, , buf, (width-strlen(buf)-2)/2, ); return 0;第5题:补充全排列的回溯算法1,2,39 这九个数字组成一个分数,其值恰好为1/3,如何组法?与第3题一样可以用全排列暴力,但这题是
5、代码填空题,且已经手写一部分全排列算法,我们负责补充其中一行代码。写全排就是用回溯的思想,直接猜到for循环里的第三行,应该就是把第一行的交换操作再交换回来复制for里的第一行代码,运行下程序,还不放心就调试下,看看数组是不是有按字典序在变化就行了。答案:t=xk; xk=xi; xi=t;= 填空第6题:加号改乘号把1+2+3+48+49中的两个加号改成乘号(修改位置不能相邻),使得式子的结果由1225变为2015。用双循环暴力两个乘号的位置,计算在数字i、j后的加号改为乘号,式子数值的变化即可,注意j的起始位置为i+2。for(int i = 1;= 48;for(int j = i +
6、2; j j+)if(1225 - i - (i + 1) - j - (j + 1) = 2015 - i * (i + 1) - j * (j + 1)i第7题:牌型种数原题:小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?请填写该整数,不要填写任何多余的内容或说明文字。 这里也是两种方法, 暴力搜索, 动态规划()。 第一种:暴力方法:int a13;static int count;int
7、ans = 0;for(a0=0; a0=4; a0+)for(a1=0; a1 a1+)for(a2=0; a2 a2+)for(a3=0; a3 a3+)for(a4=0; a4 a4+)for(a5=0; a5 a5+)for(a6=0; a6 a6+)for(a7=0; a7 a7+)for(a8=0; a8 a8+)for(a9=0; a9 a9+)for(a10=0; a10 a10+)for(a11=0; a11 a11+)for(a12=0; a12 a12+)if(a0+a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12=13)ans = count
8、;ans具体参考:解法二:动态规划,DP。假设牌是从1到13按顺序取的,dpij表示取到第i号的牌,目前总共有j张牌的取法总数,那么有状态转移方程(注意公式没考虑边界处理):如图:typedef long long LL;LL dp1414; / dpij: 当前到第i张牌,总共有j张牌时的解的个数 dp10 = dp11 = dp12 = dp13 = dp14 = 1; for (int i = 2;= 13; i+) for (int k = 0; k = 0) dpik += dpi-1k-4; if (k - 3 = 0) dpik += dpi-1k-3; if (k - 2 = 0) dpik += dpi-1k-2; if (k - 1 = 0) dpik += dpi-1k-1; dpik += dpi-1k; cout dp1313 Fun(int w, int n, int& x, int& y)x = (n - 1) / w + 1;y = n % w;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1