太难了,先吃个饭再回来慢慢填
小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字
符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个
字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
#include "bits/stdc++.h"
using namespace std;
int main()
{
int count = 0;
for (int i = 1; i <= 2020; ++i)
{
int temp = i;
while (temp)
{
if (temp % 10 == 2) count++;
temp /= 10;
}
}
cout << count;
return 0;
}
如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如,3/4 , 5/2 , 1/8 , 7/1 都是既约分数。
请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1 和 2020)?
#include "bits/stdc++.h"
using namespace std;
int gcd(int a, int b)
{
if (a % b == 0) return b;
if (a > b) return gcd(a - b, b);
else return gcd(b - a, a);
}
int main()
{
int res = 0;
for (int i = 1; i <= 2020; ++i)
{
for (int j = 1; j <= 2020; ++j)
{
if (gcd(i, j) == 1) res++;
}
}
cout << res;
return 0;
}
如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15 …
3 5 8 14 …
4 9 13 …
10 12 …
11 …
…
容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列
的数是多少?
#include "bits/stdc++.h"
using namespace std;
int main()
{
int a[50][50];
int count = 1, level = 1;
fill(a[0], a[0] + 50 * 50, 0);
while (level < 50)
{
for (int i = 1, j = level; i <= level; ++i,--j)
{
level & 1 ? a[j][i] = count++ : a[i][j] = count++;
}
++level;
}
cout << a[20][20];
return 0;
}
例如:b 发光,其他二极管不发光可以用来表达一种字符。
例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上
一行的方案可以用来表示不同的字符,尽管看上去比较相似。
例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。
例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光
的二极管没有连成一片。
请问,小蓝可以用七段码数码管表达多少种不同的字符?
20 个圆和20 条直线最多能把平面分成多少个部分?
输入的第一行包含一个整数 n,表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出三行。
第一行包含一个整数,表示最高分。
第二行包含一个整数,表示最低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。
7
80
92
56
74
88
99
10
99
10
71.29
给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个
ABABBABA 型的回文日期各是哪一天。
输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下
一个 ABABBABA 型的回文日期。
20200202
20211202
21211212
#include "bits/stdc++.h"
using namespace std;
// 是回文数
bool passOne(int n)
{
string str, pre, end;
stringstream ss;
ss << n;
ss >> str;
// 前4位
pre = str.substr(0, 4);
// 后4位
end = str.substr(4, 4);
reverse(end.begin(), end.end());
return !pre.compare(end);
}
// 是ABABBABA型回文数
bool passTwo(int n)
{
string str;
stringstream ss;
ss << n / 10000;
ss >> str;
return str[0] == str[2] && str[1] == str[3] && str[0] != str[1];
}
int main()
{
int n;
int one = 0;
int two = 0;
cin >> n;
for (int i = n + 1; i <= 99999999; i++)
{
if (passOne(i))
{
if (!one) one = i;
if (passTwo(i))
{
two = i;
break;
}
}
}
cout << one << endl;
cout << two;
return 0;
}
对于一个字符串S,我们定义S 的分值 f(S) 为S中恰好出现一次的字符个数。例如f (”aba”) = 1,f (”abc”) = 3, f (”aaa”) = 0。
现在给定一个字符串S[0…n-1](长度为n),请你计算对于所有S的非空子串S[i…j](0 ≤ i ≤ j < n), f (S[i… j]) 的和是多少。
输出一个整数表示答案。
ababc
21
子串 | f值 |
---|---|
a | 1 |
ab | 2 |
aba | 1 |
abab | 0 |
ababc | 1 |
b | 1 |
ba | 2 |
bab | 1 |
babc | 2 |
a | 1 |
ab | 2 |
abc | 3 |
b | 1 |
bc | 2 |
c | 1 |
对于20% 的评测用例,1 ≤ n ≤ 10;
对于40% 的评测用例,1 ≤ n ≤ 100;
对于50% 的评测用例,1 ≤ n ≤ 1000;
对于60% 的评测用例,1 ≤ n ≤ 10000;
对于所有评测用例,1 ≤ n ≤ 100000。
输出一行,包含一个实数,四舍五入保留2位小数,表示答案。
考虑到计算中的误差,只要你的输出与参考输出相差不超过0.01即可得分。
10 6 4 12 12
0 2 13 2 13 15
39.99
没做QAQ
当输出为39.98、39.99或40.00时可以得分
例如,对于字符串 lan 排序,只需要 1 次交换。对于字符串 qiao 排序,
总共需要 4 次交换。小蓝找到了很多字符串试图排序,他恰巧碰到一个字符串,需要 V 次交换,可是他忘了把这个字符串记下来,现在找不到了。
请帮助小蓝找一个只包含小写英文字母且没有字母重复出现的字符串,对该串的字符排序,正好需要 V 次交换。如果可能找到多个,请告诉小蓝最短的那个。如果最短的仍然有多个,请告诉小蓝字典序最小的那个。请注意字符串中可以包含相同的字符。
题面要求的一行字符串。
4
bbaa
对于20% 的评测用例,1 ≤ n ≤ 20;
对于50% 的评测用例,1 ≤ n ≤ 100;
对于100% 的评测用例,1 ≤ n ≤ 10000;