【蓝桥杯c++与Python每日练习】每日刷题day3:牌型种数,移动距离

????????????
????????????Hello,大家好我是上进小菜猪,(CSDN,华为云,阿里云,腾讯云,知乎,开源中国,掘金)同名账号,一个有趣的全栈博主,欢迎关注,多多关照????????????
????????????欢迎大家找我合作学习(文末有VX与公众号 想进学习交流群or学习资料or一起刷题 欢迎++)????????????
????????????苟怀四方志,所在可游盘,一起加油进步!????????????
????????????

一,牌型种数

标签:2015,省赛,填空

小明被劫持到X赌城,*与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

请填写该整数,不要填写任何多余的内容或说明文字。

答案;

3598180

分析:(深度搜索)
【蓝桥杯c++与Python每日练习】每日刷题day3:牌型种数,移动距离

#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++与Python每日练习】每日刷题day3:牌型种数,移动距离

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

????????????关注作者,持续阅读作者的文章,一起学习更多知识!

如果有更优解法及其思路,欢迎讨论。

上一篇:【bug解决】由于找不到vcruntime140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题。


下一篇:【蓝桥杯c++与Python每日练习】每日刷题day4:煤球数目,生日蜡烛,凑算式