A
问题描述:
在计算机存储中,15.125GB是多少MB?
解题思路:
1GB=1024MB
15.125*1024=15448
B
问题描述:
1200000有多少个约数(只计算正约数)
解题思路:
循环算一遍即可
#include
int main()
{
int ans=0, n=1200000;
for(int i=1; i<=n; i++)
if(n%i==0)
ans++;
printf("%d\n", ans);
return 0;
}
运行结果:96
C
问题描述:
一棵包含有2019个结点的树,最多包含多少个叶结点?
解题思路:
一个子节点,2018个叶节点,答案是2018
D
问题描述
在1至2019中,有多少个数的数位中包含数字9?
解题思路:
循环一遍,判断1到2019所有数字中含9的数。
#include
int main()
{
int ans=0, n=2019;
for(int i=1; i<=n; i++){
int s=i;
while(s) {
if(s%10==9) {
ans++;
break;
}
s/=10;
}
}
printf("%d\n", ans);
return 0;
}
E
问题描述
在数列 a[1], a[2], …, a[n] 中,如果对于下标 i, j, k 满足 0
给定一个数列,请问数列中有多少个元素可能是递增三元组的中心。
输入格式
输入的第一行包含一个整数 n。
第二行包含 n 个整数 a[1], a[2], …, a[n],相邻的整数间用空格分隔,表示给定的数列。
输出格式
输出一行包含一个整数,表示答案。
样例输入
5
1 2 5 3 5
样例输出
2
样例说明
a[2] 和 a[4] 可能是三元组的中心。
评测用例规模与约定
对于 50% 的评测用例,2 <= n <= 100,0 <= 数列中的数 <= 1000。
对于所有评测用例,2 <= n <= 1000,0 <= 数列中的数 <= 10000。
解题思路:
三层循环判断,并不能通过所有用例
#include
#include
using namespace std;
const int N =1020;
int a[N];
int main()
{
int n, ans;
while(scanf("%d", &n)!=EOF)
{
ans=0;
for(int i=1; i<=n; i++)
scanf("%d", &a[i]);
for(int i=1;i
for(int j=i+1;j
for(int k=j+1;k
if(a[i]
f[j]=1;
}
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
if(f[i]==1){
ans++;
}
}
printf("%d\n", ans);
}
return 0;
}
F
问题描述
小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。
给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。
元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
输入格式
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
输出答案,或者为yes,或者为no。
样例输入
lanqiao
样例输出
yes
样例输入
world
样例输出
no
评测用例规模与约定
对于所有评测用例,单词中的字母个数不超过100。
解题思路:
从头到尾模拟一遍,找出4段即可
#include
#include
const int N =1020;
char str[N];
int main()
{
while(scanf("%s", str)!=EOF)
{
int len = strlen(str);
int i=0, temp=0;
while(1) {
int s=0;
for(i=0; i
if(str[i]!='a' && str[i]!='e' && str[i]!='i' && str[i]!='o' && str[i]!='u')
{
if(s==0) {
s=1;
temp++;
}
}
else break;
s=0;
for(; i
if(str[i]=='a' || str[i]=='e' || str[i]=='i' || str[i]=='o' || str[i]=='u')
{
if(s==0) {
s=1;
temp++;
}
}
else break;
}
s=0;
for(; i
if(str[i]!='a' && str[i]!='e' && str[i]!='i' && str[i]!='o' && str[i]!='u')
{
if(s==0) {
s=1;
temp++;
}
}
else break;
}
s=0;
for(; i
if(str[i]=='a' || str[i]=='e' || str[i]=='i' || str[i]=='o' || str[i]=='u')
{
if(s==0) {
s=1;
temp++;
}
}
else break;
}
break;
}
if(temp==4 && i==len)
printf("yes\n");
else printf("no\n");
}
return 0;
}
G
问题描述
一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。
给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
输入格式
输入的第一行包含一个整数 n。
输出格式
输出一行包含一个整数,表示答案。
样例输入
30
样例输出
26
评测用例规模与约定
对于 40% 的评测用例,1 <= n <= 1000。
对于 80% 的评测用例,1 <= n <= 100000。
对于所有评测用例,1 <= n <= 1000000。
解题思路:
依旧是从1到n判断,但是只能得部分分
#include
int n;
int f(int x){
if(x<10)
return 1;
int s = x%10;
x/=10;
while(x)
{
if(x%10>s) {
return 0;
}
s=x%10;
x/=10;
}
return 1;
}
int main()
{
while(scanf("%d", &n)!=EOF)
{
int ans=0;
for(int i=1;i<=n;i++){
if(f(i)){
ans++;
}
}
printf("%d\n", ans);
}
return 0;
}
H
问题描述
小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。
小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。
这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。
请告诉小明,k 个月后空地上哪些地方有草。
输入格式
输入的第一行包含两个整数 n, m。
接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为 g,表示种了草。
接下来包含一个整数 k。
输出格式
输出 n 行,每行包含 m 个字母,表示 k 个月后空地的状态。如果为小数点,表示为空地,如果字母为 g,表示长了草。
样例输入
4 5
.g…
…
…g…
…
2
样例输出
gggg.
gggg.
ggggg
.ggg.
评测用例规模与约定
对于 30% 的评测用例,2 <= n, m <= 20。
对于 70% 的评测用例,2 <= n, m <= 100。
对于所有评测用例,2 <= n, m <= 1000,1 <= k <= 1000。
解题思路:
明显的BFS,模拟k次
#include
#include
using namespace std;
const int N = 1020;
char str[N][N];
bool book[N][N];
int n, m, t;
struct sate{
int x;
int y;
int t;
};
int nex[4][2]={1,0, -1, 0, 0,1, 0,-1};
void BFS(){
queueq;
for(int i=0; i
for(int j=0; j
if(str[i][j]=='g'){
book[i][j] = true;
sate s;
s.t=0;
s.x=i;
s.y=j;
q.push(s);
}
sate s;s.t=0;
while(!q.empty()){
s = q.front();
q.pop();
int tx, ty;
if(s.t>=t)
break;
for(int i=0; i<4; i++)
{
tx = s.x+nex[i][0];
ty = s.y+nex[i][1];
if(tx=0&&ty=0 && book[tx][ty]==false) {
book[tx][ty] = true;
str[tx][ty] = 'g';
sate p;
p.x=tx;
p.y=ty;
p.t=s.t+1;
q.push(p);
}
}
}
}
int main()
{
scanf("%d%d", &n, &m);
for(int i=0; i
scanf("%s", str[i]);
scanf("%d", &t);
//for(int i=0; i
//printf("%s\n", str[i]);
//printf("%d\n", t);
BFS();
for(int i=0; i
printf("%s\n", str[i]);
return 0;
}