2020蓝桥杯校内模拟赛

一、

  • 1200000有多少个约数(只计算正约数)。
    答案:96

二、

  • 在计算机存储中,15.125GB是多少MB?
    答案:15488

三、

  • 在1至2019中,有多少个数的数位中包含数字9?
     答案:544

四、

  • 一棵包含有2019个结点的树,最多包含多少个叶结点?
    答案:2018

五、

  • 一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
  • O(n)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; 
int n, ans;
bool ok(int x) {
	int t = 10;
	while (x) {
		int d = x % 10;
		if (d > t) return false;
		t = d;
		x /= 10;
	}
	return true;
}
int main() {
 	scanf("%d", &n);
 	for (int i = 1; i <= n; i++) {
 		if (ok(i)) ans++;
	 }
 	printf("%d", ans);
	return 0;
} 

  • 在数列 a[1], a[2], …, a[n] 中,如果对于下标 i, j, k 满足 0<i<j<k<n+1 且 a[i]<a[j]<a[k],则称 a[i], a[j], a[k] 为一组递增三元组,a[j]为递增三元组的中心。给定一个数列,请问数列中有多少个元素可能是递增三元组的中心。
  • O(n2)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; 
const int N = 1005;
int n, p[N], ans;
bool ok(int x) {
	bool ok = false;
	for (int i = x - 1; i >= 1; i--) {
		if (p[i] < p[x]) {
			ok = true; break;
		}
	}
	if (!ok) return false;
	for (int i = x + 1; i <= n; i++) {
		if (p[x] < p[i]) return true;
	}
	return false;	
}
int main() {
 	scanf("%d", &n);
 	for (int i = 1; i <= n; i++) {
		scanf("%d", &p[i]); 
	}
	for (int i = 1; i <= n; i++) {
		if (ok(i)) ans++;
	}
 	printf("%d", ans);
	return 0;
} 

七、

  • 小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
  • O(n)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; 
const int N = 105;
int n;
char s[N], h[5] = {'a', 'e', 'i', 'o', 'u'};
bool ok(int x) {
	for (int i = 0; i < 5; i++) {
		if (h[i] == s[x]) return true;
	}
	return false;
}
bool solve() {
	n = strlen(s + 1);
	//找第一段
	int t = 1;
	for (; t <= n; t++) {
		if (ok(t)) {break;}
	} 
	//找第二段
	if (t >= n || t == 1) return false;
	for (; t <= n; t++) {
		if (!ok(t)) {break;}
	} 
	//找第三段
	if (t >= n) return false;
	for (; t <= n; t++) {
		if (ok(t)) {break;}
	} 
	//找第四段
	if (t > n) return false;
	for (; t <= n; t++) {
		if (!ok(t)) {break;}
	} 
	if (t == n + 1) return true;
	return false;	
}
int main() {
  	scanf("%s", s + 1);
	if (solve()) printf("yes");
	else printf("no");
	return 0;
} 

八、

九、

十、

发布了512 篇原创文章 · 获赞 538 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_41280600/article/details/104857907