第一题:
问题描述:在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;
}
后续题目有待更新,谢谢!
初次写博客,如有不足之处,尽管提出宝贵意见。