第十一届软件类校内模拟赛——CC++程序设计-填空题

总结一下今天上午的模拟赛

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;
} 

程序设计题总结稍后发布

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章