總結一下今天上午的模擬賽
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;
}
程序設計題總結稍後發佈