????????????
????????????Hello,大家好我是上进小菜猪,(CSDN,华为云,阿里云,腾讯云,知乎,开源中国,掘金)同名账号,一个有趣的全栈博主,欢迎关注,多多关照????????????
????????????欢迎大家找我合作学习(文末有VX与公众号 想进学习交流群or学习资料or一起刷题 欢迎++)????????????
????????????苟怀四方志,所在可游盘,一起加油进步!????????????
????????????
一,牌型种数
标签:2015,省赛,填空
小明被劫持到X赌城,*与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
答案;
3598180
分析:(深度搜索)
#include<bits/stdc++.h>
using namespace std;
int x=0;
void cout1(int n,int m)
{
if(m>13)
{
return;
}
if(n==13)
{
if(m==13)
{
x++;
}
return;
}
for(int j=0;j<=4;j++)
{
cout1(n+1,m+j);
}
}
int main()
{
cout1(0,0);
cout<<x;
return 0;
}
python解法:
q=0
def digui(n , m, q):
if(m>13):
return main
if(n==13):
if(m==13):
q=q+1
return main
for a in range(5):
digui(n+1,m+a,q)
def main():
digui(0,0,q)
print(q)
二,移动距离
标签:2015,省赛,大题
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3…
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....
我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)
输入为3个整数w m n,空格分开,都在1到10000范围内
w为排号宽度,m,n为待计算的楼号。
要求输出一个整数,表示m n 两楼间最短移动距离。
输入
输入为3个整数w m n,空格分开,都在1到10000范围内输出
要求输出一个整数,表示m n 两楼间最短移动距离。样例输入
6 8 2
样例输出
4
分析:
c++解法:
#include<bits/stdc++.h>
using namespace std;
//算出n和m的行数函数
int i(int w,int m)
{
if(m%w==0)
{
return m/w;
}
else
{
return m/w+1;
}
}
int j(int w,int m,int i)
{
if(i%2==0)
{
return abs(m-(i-1)*w);
}
else
{
return abs(i*w-m+1);
}
}
int main()
{
int w,m,n;
cin>>w>>m>>n;
int mh,nh,ml,nl;
mh=i(w,m);
nh=i(w,n);
ml=j(w,m,mh);
nl=j(w,n,nh);
int count1=0;
count1=abs(mh-nh)+abs(ml-nl);
//cout<<mh<<" "<<nh<<endl;
//cout<<ml<<" "<<ml<<endl;
cout<<count1<<endl;
}
总结:
典型的蛇形找最短路径题,先数学分析,找到合适的公式。
四,END
????????????关注作者,持续阅读作者的文章,一起学习更多知识!
如果有更优解法及其思路,欢迎讨论。