<h1>非官方题解,个人题解。个人能力有限,如果描述和结果有问题,请留言<br></h1>
<h1>填空题</h1>
<h2>第一题</h2>
<p><br>
网友年龄<br><br>
某君新认识一网友。<br>
当问及年龄时,他的网友说:<br>
“我的年龄是个2位数,我比儿子大27岁,<br>
如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”<br><br>
请你计算:网友的年龄一共有多少种可能情况?<br><br>
提示:30岁就是其中一种可能哦.<br><br>
请填写表示可能情况的种数。<br>
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。</p>
<p><br></p>
<p>思路:拆分十位与个位,反转以后构造儿子的年龄,使用原数减儿子的年龄判断即可</p>
<p></p>
<pre class="blockcode"><code class="language-cpp">#include <iostream>
using namespace std;
int main()
{
int ans=0;
for(int i=30;i<100;i++)
{
int si=i/10;
int ge=i%10;
if(i-(ge*10+si)==27)
ans++;
}
cout<<ans;
return 0;
}
</code></pre><br>
我的答案是7种.分别是如下情况
<p></p>
<p>30 3<br>
41 14<br>
52 25<br>
63 36<br>
74 47<br>
85 58<br>
96 69</p>
<p><br></p>
<p><br></p>
<h2>第二题</h2>
<p><br></p>
<p><br>
生日蜡烛<br><br>
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。<br><br>
现在算起来,他一共吹熄了236根蜡烛。<br><br>
请问,他从多少岁开始过生日party的?<br><br>
请填写他开始过生日party的年龄数。<br>
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。</p>
<p><br></p>
<p>题目的意思很明了,求那一岁开始生日</p>
<p>思路:直接枚举开始过生日的那一岁即可</p>
<p><br></p>
<p></p>
<pre class="blockcode"><code class="language-cpp">#include <iostream>
using namespace std;
int main()
{
for(int i=1;i<100;i++)
{
int sum=0;
for(int j=i;j<100;j++)
{
sum+=j;
if(sum>236)
break;
if(sum==236)
cout<<i<<"->"<<j<<endl;
}
}
return 0;
}
</code></pre><br>
结果是26->33,也就是说从26岁开始过生日,直到现在33岁。
<p></p>
<p>有人说这个题出得不严谨,说假如那个人就是236岁过的生日欸?人还是人,还是没有活的那么长的,趁着自己还年轻少一点浮躁,多干点实事(对我自己说的)</p>
<h2>第三题</h2>
<p><br>
方格填数<br><br>
如下的10个格子<br>
+--+--+--+<br>
| | | |<br>
+--+--+--+--+<br>
| | | | |<br>
+--+--+--+--+<br>
| | | |<br>
+--+--+--+<br><br>
(如果显示有问题,也可以参看【图1.jpg】)<br><img alt="" src="https://201907.oss-cn-shanghai.aliyuncs.com/cs/5606289-89b4ab613e3f82f8eb25e04741771758"><br>
填入0~9的数字。要求:连续的两个数字不能相邻。<br>
(左右、上下、对角都算相邻)<br><br>
一共有多少种可能的填数方案?<br><br>
请填写表示方案数目的整数。<br>
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。</p>
<p>思路:搜索,把10个空全部填完,然后判断每一个数字是否符合要求。</p>
<p>代码不是我自己写的,参考<a data-token="e3e17736212722c3ab8c83c37b5f3942" href="http://blog.csdn.net/y1196645376/article/details/50938608" rel="nofollow">Wahh_1314</a><br></p>
<p></p>
<pre class="blockcode"><code class="language-cpp">#include <iostream>
#include <cmath>
using namespace std;
const int row=3,col=4;
int visit[10];
int flag[row][col];
int mpt[row][col];
int ans=0;
void init()
{
ans=0;
for(int i=0;i<10;i++)
visit[i]=0;
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
mpt[i][j]=0;
flag[i][j]=1;
}
//左上角和右下角不能填写任何的数字
flag[0][0]=0;
flag[2][3]=0;
}
void judge()
{
//八个方向 右 左 上 下 右下 左下 右上 左上
int dir[8][2] = { 0,1, 0,-1, 1,0, -1,0, 1,1, 1,-1, -1,1, -1,-1};
int valid=1;//初始化为合法
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
//左上角和右下角不处理
if(flag[i][j]==0) continue;
for(int k=0;k<8;k++)
{
int x,y;
x = i + dir[k][0];
y = j + dir[k][1];
//当前访问点是否还在矩形中
if(x < 0 || x >= 3 || y < 0 || y >= 4 || flag[x][y] == 0) continue;
//相邻即相减后的绝对值为1 判断当前是否合法
if(abs(mpt[i][j]-mpt[x][y]==1))valid=0;
}
}
}
if(valid){
ans++;
//用来测试输出结果
for(int i=0;i<row;i++){
for(int j=0;j<col;j++)
cout<<mpt[i][j];
cout<<endl;
}
cout<<endl;
}
}
void dfs(int n)
{
int x=n/4;//获得所在行
int y=n%4;//获得所在列
if(x==3)//填满后判断是否满足情况
{
judge();
return;
}
if(flag[x][y])// |
|