1.题目:
问题描述 在计算机存储中,15.125GB是多少MB?
答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数。
- 学习计算机的人都知道1GB=1024MB(2的10次方)
所以这道题的答案即为15.125*1024=15488(可以使用电脑的计算器,也可以手算)
2.题目:
问题描述
1200000有多少个约数(只计算正约数),填一个整数。
- 问题分析
枚举法
约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。
4的正约数有:1、2、4。
6的正约数有:1、2、3、6。
10的正约数有:1、2、5、10。
12的正约数有:1、2、3、4、6、12。
20的正约数有:1、2、4、5、10、20。
注意:一个数的约数必然包括1及其本身。 - 代码:
#include<iostream>
#define N 1200000
using namespace std;
int main(){
int ans=0;
for(int i=1;i<N;++i){
if(N%i==0)
ans++;
}
cout<<ans<<endl;
return 0;
}
答案:96
3.题目:二叉树
【问题描述】
一棵包含有2019个结点的二叉树,最多包含多少个叶结点?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数。
- 分析思路
下图就是一颗二叉树
二叉树有几个性质:
(1)叶节点即为度为0的节点,没有左右子节点,上图中最后一行和第三行最后一个都是叶节点
(2)n=n0+n1+n2,为使叶子节点数(n0)最多,必须n1最小,则n1为0,而n0=n2+1 - 解法一:
得n2=(2019-1)/2=1009
所以n0=1010 - 解法二:
题目给的节点数是2019个,我们考虑满二叉树的节点数,
当这个树为10层时,其节点数为2^10(1024个节点);
当这个数为11层时,其节点数为2^11(2048个节点)
所以由2019得知这棵树为11层,且最后一层(第11层)没有满。
用题目给的2019节点数减去第十层节点数,得出11层的叶子节点数
2019-1024=995
可得出11层由995个叶子结点,512-995/2=15
所以总得叶子节点数为995+15=1010
答案:1010
4.题目:
题目描述
在1至2019中,有多少个数的数位中包含数字9?
注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算时只是算一个数。
结果为1个整数
- 分析思路:
用取余数的方法,并且检查
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int N=2019;
int ans=0;
void check(int x){
while(x) //x为1-2019间的数
{
int y=x%10; //对其求余数
if(y==9){ //余数为9,说明该数字有9
ans++;
return;
}
x=x/10; //排除重复
}
return;
}
int main(){
for(int i=1;i<=N;i++){
check(i);
}
cout<<ans<<endl;
return 0;
}
答案:544
5.题目:
一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。
给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
【输入格式】
输入的第一行包含一个整数 n。
【输出格式】
输出一行包含一个整数,表示答案。
【样例输入】
30
【样例输出】
26
【评测用例规模与约定】
对于 40% 的评测用例,1 <= n <= 1000。
对于 80% 的评测用例,1 <= n <= 100000。
对于所有评测用例,1 <= n <= 1000000。
- 分析思路
深度优先搜索
#include<iostream>
using namespace std;
int n;
int sum = 0;
void dfs(int num)//定义一个函数
{
for(int i = num%10 ? num%10 : 1; i <= 9; i++){ //数字对10取余 ,例如3%10=3,不符合,继续循环
if(num*10+i <= n){
sum++;
dfs(num*10+i);
}
}
}
int main()
{
cin>>n;
dfs(0);
cout<<sum<<endl;
return 0;
}