PAT 联系三 商人的阴谋 [1003]

本文介绍了一个使用递归算法解决树形结构中节点深度计算的问题,并展示了如何通过输入构建树形结构,计算最深深度及相应节点数量,最终输出对应的价格变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我写出来啦!!!

虽然是图里最简单的!

我用了递归!

300多我满足了!

#include<iostream>
#include<vector>
#include <iomanip>

using namespace std;
int N;
int maxdep=0;
int ronum=0;//最深数量
float iniprice,incre;
vector <int> index;//存父亲
vector <int> depth;//存每个节点的深度
int dep(int n,int s);

int main(){
    ios::sync_with_stdio(false);
    cin>>N>>iniprice>>incre;
    index.resize(N);
    depth.resize(N,-1);
    int mm;
    for(int i=0;i<N;i++){
        cin>>mm;
        index[i]=mm;
    }//输入完成
    for(int i=0;i<N;i++){
        if(depth[i]==-1)
         int m=dep(i,index[i]);
    }//计算每个节点深度
    float lastprice=iniprice;
    float ini=1+incre/100;
    for(int i=0;i<maxdep;i++){
        lastprice*=ini;
    }
    cout<<setiosflags(ios::fixed)<<setprecision(2)<<lastprice;
    //保留两位小数输出
    cout<<" "<<ronum; 
    return 0;
}
int dep(int n,int s){
    if(s==-1){
        depth[n]=0;
        return 0;
    }
    else 
    {
        int dd;
        dd=dep(s,index[s])+1;
        depth[n]=dd;
        if(dd>maxdep){
            maxdep=dd;
            ronum=1;
        }
        else{
            if(dd==maxdep)
                ronum++;
        }
        return dd;
    }            
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值