pat 1106(pattern)

网友投稿 217 2022-09-21


pat 1106(pattern)

1. 源代码如下 #include #include #include #define maxn 100000 const double eps = 1e-8; #define equ(a,b) ((fabs((a) - (b))) < (eps)) using namespace std; struct Node{ double price;//销售价格 int leafFlag;//叶子标志 vector child;//存储孩子下标 int childNum;//孩子数 }; double increment;//涨幅--固定--全局变量 double minPrice = 10000000.0 ;//最低零售价,一定要大,否则测试数据的price会大于该值 Node node[maxn]; //深搜--计算销售价格 //root为根节点 level为层次 price为价格 void DFS (int root,double price,double &minPrice){ if(node[root].childNum!=0){ for(int i = 0;i < node[root].childNum;i++){//遍历所有的孩子 // printf("next root = %d\n",node[root].child[i]); DFS(node[root].child[i],price + price*(increment/100),minPrice); } } else{//赋值 并返回 node[root].price = price; if(minPrice > price){ minPrice = price; //printf("minPrice = %lf\n",minPrice); } //printf("root = %d, price = %lf\n",root,price); return; } } int main(){ int nodeNum;//结点数 double startPrice;//初始价格 int i,j; int tempIndex;//暂存索引 vector leafNodeIndex;//记录叶子节点下标 int count = 0; scanf("%d %lf %lf",&nodeNum,&startPrice,&increment); for(i = 0;i< nodeNum;i++){ scanf("%d",&node[i].childNum); if(node[i].childNum!=0) { for(j = 0;j< node[i].childNum;j++){ scanf("%d",&tempIndex); node[i].child.push_back(tempIndex); } } else leafNodeIndex.push_back(i); //记录叶子节点下标 } DFS(0,startPrice,minPrice); for(i = 0;i < leafNodeIndex.size();i++){ if(equ(node[leafNodeIndex[i]].price , minPrice)){ count++; } } printf("%.4lf ",minPrice); printf("%d",count); } /** 10 1.80 1.00 3 2 3 5 1 9 1 4 1 7 0 2 6 1 1 8 0 0 0 1 1.80 1.00 0 注: 1.被调用函数中使用全局变量是否会改变全局变量的值?见博客中10 */


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:pat 1061(patekphilippe手表)
下一篇:pat 1035(patients)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~