总结一下今天上午的模拟赛
1.约数
问题描述
1200000有多少个约数(只计算正约数)。
#include<iostream>
using namespace std;
int main()
{
int n=0,cnt=0;
cin >> n;
for(int i=1;i<=n;i++)
if(n%i==0)
cnt++;
cout << cnt;
return 0;
}
2.计算机存储
问题描述
在计算机存储中,15.125GB是多少MB?
#include<iostream>
using namespace std;
int main()
{
int i=15.125;
cout << 1024 *15.125;
return 0;
}
3.叶子节点
问题描述
一棵包含有2019个结点的二叉树,最多包含多少个叶结点?
根据满二叉树性质,可以得出:
当数的深度为1时,数的节点数为21-1=1,叶子节点数为20=1
当数的深度为2时,数的节点数为22-1=3,叶子节点数为21=2
当数的深度为3时,数的节点数为23-1=7,叶子节点数为22=4
当数的深度为4时,数的节点数为24-1=15,叶子节点数为23=8
依此类推,当数的深度为11时,数的节点数为211-1=2047,叶子节点数为210=1024
与本题中树的节点相差2047-2019=28个节点。
而除叶子节点外,每一层上的所有结点都有两个子结点,所以28个叶子节点被砍掉后,被砍掉结点的父节点成为了新的叶子节点,所以叶子节点数为1024-28+14=1010
4.包含“9”的数字
问题描述
在1至2019中,有多少个数的数位中包含数字9?
注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算只是算一个数。
#include<iostream>
using namespace std;
int main()
{
int n,cnt=0;
cin >> n;
for(int i=1;i<=9;i++)//一位数
if(i%9==0)
{
cnt++;
continue;
}
for(int i=10;i<=99;i++)//两位数
{
if(i/10==9)
{
cnt++;
continue;
}
if(i%10==9)
{
cnt++;
continue;
}
}
for(int i=100;i<=999;i++)//三位数
{
if(i/100==9)
{
cnt++;
continue;
}
if((i/10)%10==9)
{
cnt++;
continue;
}
if(i%100%10==9)
{
cnt++;
continue;
}
}
for(int i=1000;i<=n;i++)//四位数
{
if((i/100)%10==9)
{
cnt++;
continue;
}
if((i/10)%100%10==9)
{
cnt++;
continue;
}
if(i%10==9)
{
cnt++;
continue;
}
}
cout << cnt;
return 0;
}
程序设计题总结稍后发布