题目都还没有处理输入时,号的问题…
[T1]
第 1 题:给定一颗二叉树,树的每个节点的值为一个正整数。如果从根节点到节点 N 的路径上不存在比节点 N 的值大的节点,那么节点 N 被认为是树上的关键节点。求树 上所有的关键节点的个数。请写出程序,并解释解题思路。
例子:
输入:3, 1, 4, 3, null, 1, 5
输出:4
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int tree[N];
bool st[N];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&tree[i]);
}
memset(st,true,sizeof st);
for(int i=1;i<=n;i++){
int j = i;
while(j){
j = j>>1;
int fnode = tree[j];
if(fnode>tree[i]){
st[i] = false;
break;
}
}
}
int res = 0;
for(int i=1;i<=n;i++){
if(st[i]){
res++;
}
}
cout<<res<<endl;
}
[T2]
第 2 题:训练场上有一个台阶,总共有 n 级。一个运动员可以跳 1 级,也可以跳 2 级。 求运动员有多少种跳法。请写出程序,并解释解题思路。
acwing上有同类型题, 821. 跳台阶
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int f[N];
int main(){
int n;
cin>>n;
f[1] = 1;
f[2] = 2;
for(int i=3;i<=n;i++){
f[i] = f[i-1] + f[i-2];
}
cout<<f[n];
}
T3
第 3 题:给定一个非负整数序列 x1, x2, …, xn,可以给每一个整数取负数或者取原值, 求有多少种取法使得这些整数的和等于期望值 E。请写出程序,并解释解题思路。
例子:
输入:非负整数序列为 1, 1, 1, 1, 1,期望值 E 为 3 输出 :5
5 种取法分别为:
-1+1+1+1+1 = 3
1-1+1+1+1 = 3
1+1-1+1+1 = 3
1+1+1-1+1 = 3
1+1+1+1-1 = 3
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
int num[N];
int res[N];
int n,e,total;
void dfs(int x){
if(x==n){
int sum = 0;
for(int i=0;i<n;i++){
sum+=res[i];
}
if(sum==e){
total++;
}
return;
}
res[x] = num[x];
dfs(x+1);
res[x] = -num[x];
dfs(x+1);
}
int main(){
cin>>n>>e;
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
}
dfs(0);
cout<<total<<endl;
return 0;
}
这是哪个高校的呀?
好像是复旦大学
求第一题题解