二叉树的层数要注意一下,因为不一定是满的二叉树所以要区分当n是2的倍数与否的情况;
从第一层到倒数第二层都可以直接一层一层来求和求最大值,但是最后一层不一定是满的,所以得记录一下到最后一层还剩下多少个元素(n - k)
参考代码:
#include<iostream> #include<cmath> using namespace std; int n, x, ma; int main(){ cin>>n; int sum = 0; int v = 0;//层数 int k = 0;//记录下一个的元素的下标 for(int i = 0; i < log2(n + 1); i++){ sum = 0; if(i < log2(n + 1) - 1){//从第一层到倒数第二层 for(int j = 1; j <= pow(2, i); j++){ cin>>x; sum += x; k++; } if(sum > ma) { ma = sum; v = i; } } else {//最后一层 for(int j = 1; j <= n - k; j++){ cin>>x; sum += x; } if(sum > ma) { ma = sum; v = i; } } } cout<<v + 1; return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题8.8 (C++代码)浏览:779 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:599 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:586 |
C语言程序设计教程(第三版)课后习题9.3 (Java代码)浏览:966 |
简单的for循环浏览:1412 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:543 |
三角形 (C++代码)记忆化搜索浏览:1234 |
循环入门练习5 (C语言代码)浏览:839 |
数组与指针的问题浏览:719 |
时间转换 (C语言代码)浏览:631 |