首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >树数学公式UVA

树数学公式UVA
EN

Stack Overflow用户
提问于 2017-01-13 04:14:10
回答 2查看 71关注 0票数 1

猫戴帽子的当且仅当它的帽子里有N只猫。只有一只猫不在其他猫的帽子里。如果有M猫没有帽子,有多少猫?

我尝试了这个问题,下面是我的代码片段。

代码语言:javascript
复制
LL dfs(int n,int m,LL sum){
    if(m<n){
        return -1; // If not possible
    }
    if(m==n){
        return sum+n+1;
    }
    return  dfs(n,(m/n)+m%n,sum+n*(LL)floor(m*1.0/n));
}

我显式地处理了案例n==1和m==1。

在我出错的地方找不到它。

链接:猫问题

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-14 10:06:42

你的计算是不必要的复杂--答案有一个直截了当的公式,不需要你的递归。

如果N=1 (每顶帽子有一只猫)那么M=1 (只能有一只猫没有帽子),那么猫的总数是未知的,这是正确的。

在一般情况下,N>1,如果没有带帽子的猫,那么肯定只有“一只猫”没有帽子。所以在一开始,这就使得一只猫没有帽子。每当我们在一只猫上增加一顶帽子时,就会在这顶帽子里增加N只新的无帽子猫,但把那只老猫从没有帽子的地方移除,所以每一顶帽子都会给那些没有帽子的猫增加一个N-1的数目。因此,如果H是带帽子的猫的数量,则没有帽子的猫的数量是

代码语言:javascript
复制
M = 1 + H * (N - 1)

解决H的问题,

代码语言:javascript
复制
H = (M - 1) / (N - 1)

所以猫的总数是

代码语言:javascript
复制
T = M + H
  = M + (M - 1) / (N - 1)

请注意,这并不取决于猫树的结构。如果最后一个表达式是整数,否则是不可行的,则这是一个可行的答案。

下面是简单的Python3.x代码,打印猫的总数--我将把解析和其他打印留给您。如果您不喜欢if的双层,那么我的代码可以很容易地被重构成更平坦的代码。

代码语言:javascript
复制
def print_total_cats(n, m):
    if n == 1:
        if m == 1:
            print('Multiple')
        else:
            print('Impossible')
    else:
        if (m - 1) % (n - 1) != 0:
            print('Impossible')
        else:
            print(m + (m - 1) // (n - 1))
票数 1
EN

Stack Overflow用户

发布于 2017-01-14 06:46:41

我错过的一个例子是,如果m==1答案应该是1,我会显式地处理它。

代码语言:javascript
复制
LL dfs(int n,int m,LL sum){
if(m<n){
    return -1;
}
if(m==n){
    return sum+n+1;
}
return  dfs(n,(m/n)+m%n,sum+n*(LL)floor(m*1.0/n));}

int main(){
int n,m;
LL a;
while(scanf("%d%d",&n,&m)&&(n||m)){
    cout<<n<<" "<<m<<" ";
if(n==1 && m==1){
    cout<<"Multiple\n";
    continue;
}
if(n==1 && m>=2){
    cout<<"Impossible\n";
    continue;
}
 if(m==1)
     a=1;
 else
    a=dfs(n,m,0);
 if(a==-1){
     cout<<"Impossible\n";
 }  else
    cout<<a<<"\n";
}
return 0;}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41627286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档