一、年龄巧合
题目链接: 年龄巧合 - 蓝桥云课 (lanqiao.cn)
题目要求:
小明和他的表弟一起去看电影,有人问他们的年龄。小明说:今年是我们的幸运年啊。我出生年份的四位数字加起来刚好是我的年龄。表弟的也是如此。已知今年是 2014年,并且,小明说的年龄指的是周岁。
请推断并填写出小明的出生年份。
解题思路:
一个暴力水题,让年份每个数字相加并且加上当前年份减去年份相加的岁数等于2014,那就是正确年龄,取离2014最近的两个就是表弟和小明的年龄,咱们的代码只输出小明的年龄。
#include<bits/stdc++.h> using namespace std; int pd(int x)//年份每个数字相加 { int z = 0; while(x) { z+=x%10; x/=10; } return z; } int main() { int n=2014,sum=0,max=2014,min=0; for(int i=2013;i>0;i--)//从2013开始 { if(i+pd(i)==n&&i { max = i;//让当前年份等于max min++;//计算是第几次的年龄,如果是第二次就可以跳出循环了,这就是小明的年龄 if(min==2) { break; } } } cout< return 0; }
二、纸牌三角形
题目链接:纸牌三角形 - 蓝桥云课 (lanqiao.cn)
题目要求:
A,2,3,4,5,6,7,8,9 共 9张纸牌排成一个正三角形(A 按 1 计算)。要求每个边的和相等。 下图就是一种排法。
这样的排法可能会有很多。
如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
请你计算并提交该数字。
解题思路:
一个简单的dfs全排列,如果不懂得可以去搜一下全排列学习一下,使用函数固然方便但是手敲全排列可以巩固记忆。
#include<bits/stdc++.h> using namespace std; int sum,arr[10],pd[10];//一个纸牌数组,一个用来判断的数组 void dfs(int x) { if(x>9)//如果搜索的数字已经超过9个 { int a1 = arr[1] + arr[2] + arr[3] + arr[4]; int a2 = arr[4] + arr[5] + arr[6] + arr[7]; int a3 = arr[7] + arr[8] + arr[9] + arr[1]; if(a1==a2&&a1==a3)//让三条边相加 判断第一条边和第二条 第一条和第三条 { sum++;//如果他们相等 三角形成立 ++ } return;//返回 } for(int i=1;i<=9;i++)//如果没超过九个 { if(pd[i]==0)//进入循环之后如果当前数字没有用过 { pd[i] = 1;//标记用过 arr[x] = i;//选择它 dfs(x+1);//搜索下一个数字 pd[i] = 0;//回溯 arr[x] = 0; } } } int main() { dfs(1); cout<<sum/6;//除6是因为旋转重复三次 镜像重复两次 2*3等于6 return 0; }
三、取球游戏
题目链接:取球游戏 - 蓝桥云课 (lanqiao.cn)
题目要求:
今盒子里有 nn 个小球,A、B 两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。
我们约定:
每个人从盒子中取出的球的数目必须是:1,3,7 或者 8 个。轮到某一方取球时不能弃权!A 先取球,然后双方交替取球,直到取完。被迫拿到最后一个球的一方为负方(输方)
请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A 是否能赢?
解题思路:
这是一个入门的博弈论,非常简单,如果只有一个球的时候,A必输,而当球数是1+1,1+3,1+7,1+8 时 A可分别取1,3,7,8,使得后手输,所以就很简单了,记录一下这些数字即可
#include<bits/stdc++.h> using namespace std; int a[101],b[10001]; int main() { int n; cin>>n; for(int i=0;i { cin>>a[i]; } for(int i=1;i<10001;i++) { if(b[i]==0) { b[i+1]=1;//标记一下这几个数字为1,和前几天的简单哈希有点像 b[i+3]=1; b[i+7]=1; b[i+8]=1; } }//开大点 肯定博弈不了那么多 for(int i=0;i { cout<<b[a[i]]<<endl;//输出a[i]上对应的数字,那就是游戏输赢 } return 0; }
总结
今天的三道题不算很难,但是也需要熟练掌握!加油!为了国一!