0
点赞
收藏
分享

微信扫一扫

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

文章目录


📢📢📢
🌟🌟🌟Hello,大家好我是 上进小菜猪,一个有趣的全栈博主,欢迎关注,多多关照🌟🌟🌟
😜😜😜欢迎大家找我合作学习(文末有VX与公众号 想进学习交流群or学习资料or一起刷题 欢迎++)😜😜😜
💓💓💓苟怀四方志,所在可游盘,一起加油进步!💓💓💓
📢📢📢

一,牌型种数

小明被劫持到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)

二,移动距离

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 两楼间最短移动距离。

分析:
在这里插入图片描述

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

😜😜😜关注作者,持续阅读作者的文章,一起学习更多知识!
点击关注,联系作者,进入群聊,一起刷题😜😜😜

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

举报

相关推荐

0 条评论