2020蓝桥杯校内模拟赛题解

第一题:

问题描述:在1至2019中,有多少个数的数位中包含数字9?
注意,有的数中的数位包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算只是算一个数。
#include<iostream>
using namespace std;
int main()
{
	cout << "Starting..." << endl;
	int count = 0;
	for (int i = 1; i <= 19; i++)
	{
		int j = i;
		
		while (j > 0)
		{
			int obj = j % 10;
			j = j / 10;
			if (obj == 9)
			{
				cout << i << endl;
				count++;
				break;

			}

		}

	}
	cout << count << endl;
	cout << "Ending..." << endl;
		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]为递增三元组的中心。
给定一个数量,请问数列中有多少个元素可能是递增三元组的中心。
#include<iostream>
using namespace std;
int main()
{
    int n;
    cout << "请输入一个整数:";
    cin >> n;
    int a[10000] = { 0 };
    int count = 0;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    for (int i = 1; i < n - 1; i++)
    {
        int s = 0, t = 0;
        for (int j = 0; j < i; j++)
        {
            if (a[j] < a[i])
                s = 1;
            break;
        }
        for (int j = i + 1; j < n; j++)
        {
            if (a[j] > a[i])
                t = 1;
            break;
        }
        if (s == 1 && t == 1)
            count++;
    }
    cout << count << endl;
    return 0;
}

第三题:

问题描述:小明对类似于hello这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第四段由一个或多个元音字母组成。
给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则输出no。
元音字母包括a,e,i,o,u,共五个,其他均为辅音字母。
输入格式:输入一行,包含一个单词,单词中只包含小写英文字母。
#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s;
	cout << "请输入单词:";
	cin >> s;
	int pd[10];
	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u')
			pd[i] = 1;//表示元音
		else
			pd[i] = 0;//表示辅音
	}
	int count = 0;
	int k, l, m;
	if (pd[0] != 1)
	{
		count++;
		for (int k = 1; k < s.size(); k++)
		{
			if (pd[k] == 1)
			{
				count++;
				for (int l = k + 1; l < s.size(); l++)
				{
					if (pd[l] != 1)
					{
						count++;
						for (int m = l + 1; m < s.size(); m++)
						{
							if (pd[m] == 1)
							{
								count++;
								break;
							}
						}
						break;
					}
				}
				break;
			}
		}

	}
	if (count == 4)
		cout << "yes" << endl;
	else
		cout << "no" << endl;
	return 0;
	
}

第四题:

问题描述:小明有一块宝地,他将这块宝地划分为n行n列的小块,每行和每列的长度都为1.
小明选了其中的一些小块宝地,种上了草,其他小块仍然是保持空地。
这些草长的很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。
请告诉小明,k个月后空地上哪些地方有草。
输入格式:输入的第一行包含两个整数n,m
接下来n行,每行包含m个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示空地,如果字母为g,表示种了草。
接下来包含一个整数k.
#include<iostream>
using namespace std;
int main()
{
	char a[100][100];
	int n, m,k;
	cout << "请输入n和m" << endl;
	cin >> n >> m;
	cout << "请输入初始化的字母:" << endl;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			cin >> a[i][j];
	cout << "请输入生长时间k:" << endl;
	cin >> k;
	char b[100][100];
	while (k > 0) {
		for (int i = 0; i < n; i++)
			for (int j = 0; j < m; j++)
				b[i][j] = a[i][j];//保证原数组不被修改
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				if (b[i][j] == 'g') {
					if (i > 0 && i < n-1 && j > 0 && j < m-1) {//中间草地
						a[i][j - 1] = 'g';
						a[i][j + 1] = 'g';
						a[i - 1][j] = 'g';
						a[i + 1][j] = 'g';
					}
					if (i == 0 && j > 0 && j < m - 1) {//顶层中间草地
						a[0][j - 1] = 'g';
						a[0][j + 1] = 'g';
						a[1][j] = 'g';
					}
					if (j == 0 && i > 0 && i < n - 1) {//左侧中间草地
						a[i - 1][0] = 'g';
						a[i + 1][0] = 'g';
						a[i][1] = 'g';
					}
					if (i == n-1 && j > 0 && j < m - 1) {//底层中间草地
						a[n-1][j - 1] = 'g';
						a[n-1][j + 1] = 'g';
						a[n-2][j] = 'g';
					}
					if (j == m - 1 && i > 0 && i < n - 1) {//右侧中间草地
						a[i - 1][m - 1] = 'g';
						a[i + 1][m - 1] = 'g';
						a[i][m - 2] = 'g';
					}
					if (i == 0 && j == 0) {//左上顶点草地
						a[0][1] = 'g';
						a[1][0] = 'g';
					}
					if (i == 0 && j == m - 1) {//右上顶点草地
						a[0][m - 2] = 'g';
						a[1][m - 1] = 'g';
					}
					if (i == n - 1 && j == 0) {//左下顶点草地
						a[n - 1][1] = 'g';
						a[n - 2][0] = 'g';
					}
					if (i == n - 1 && j == m - 1) {//右下顶点草地
						a[n - 2][m - 1] = 'g';
						a[n - 1][m - 2] = 'g';
					}
				}
			}
		}
		k--;
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++)
			cout << a[i][j];
		cout << endl;
	}		
	return 0;
}

第五题:

问题描述:一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。
给定正整数n,请问在整数1至n中有多少个数位递增的数?
#include<iostream>
#include<string>
using namespace std;
int main()
{
	int n;
	cout << "请输入一个整数:";
	cin >> n;
	if (n < 10)
		cout << "有" << n << "个递增数" << endl;
	else
	{
		int count = 0;
		for (int i = 10; i < n + 1; i++) {
			string s = std::to_string(i);
			for (int j = 0; j < s.size() - 1; j++) {
				if (int(s[j]) > int(s[j + 1]))
					count++;
			}

		}
		cout << "有" << n - count << "个递增数" << endl;
	}
	return 0;
}
后续题目有待更新,谢谢!
初次写博客,如有不足之处,尽管提出宝贵意见。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值