目录
一.第一题
1.问题:小蓝制作门牌号
2.解题过程
(1)方法1(数字转化法)
(2)方法2(转化数字个位比较法)
3.结果:
4.总结:
二.第二题
1.问题:顺子日期
2.解题过程:
3.结果
4.总结:
三.第三题
1.问题:小蓝排箱子
2.解题过程
3.总结
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
int main()
{
int a = 0, b = 0,c=0;
int arr[2020] = { 0 };
char arr2[10] = { '0' };
for (a = 0; a < 2020; a++)
{
arr[a]=a+ 1;//数组内每个元素都放上数字
sprintf(arr2,"%d",arr[a] );//关键使用sprintf来进行数字转化字符串
for (b = 0; b < 4; b++)
{
if (arr2[b] == '2')判断有几个2,计算字符2的个数
c++;
}
}
printf("%d",c);
return 0;
}
int c = 0;
void part(int a)
{
if (a % 10 == 2)//判断其个位是否位2
c++;
else
;
if (a > 10)//比个位大的将进行/10操作将十位转化位个位
{
a = a / 10;
part(a);//进行递归操作计算个位以上的数字是否为2
}
else
;
}
int main()
{
int a = 0, b = 0;
int arr[2020] = { 0 };
for (a = 0; a < 2020; a++)
{
arr[a] = a + 1;
part(arr[a]);
}printf("%d",c);
return 0;
}
(1).使用sprinf可以进行数字转化成字符串,sprintf - C++ Reference (cplusplus.com)使用方法。
当然它还可以进行字符串转化数字,字符串连接等。
(2).对于判断数字的每一位是否符合等于某一个数可以用%10来判断个位,然后让较大的位进行除以10操作然后再%,这个操作可以用递归来做。
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。
顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。
例如20220123 就是一个顺子日期,因为它出现了一个顺子:123;
本题顺子的定义:i j k 是一个顺子,满足 i+1=j、j+1=k、i≥0。
而20221023 则不是一个顺子日期,它一个顺子也没有。
小明想知道在整个2022年份中,一共有多少个顺子日期。
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只输出这个整数,输出多余的内容将无法得分。
int main()
{
int arr[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};//明确每个月最多有几天,进行
int a, b,c,d,e=0;
for(a=0;a<2;a++)//月的十位
{
for (b = 0; b <= 9; b++)//月的个位
{
if ((a * 10 + b) <= 12)//保证月是合法的
{
for (c = 0; c <= 3; c++)//日的十位
{
for (d = 0; d <= 9; d++)//日的个位
{
if (arr[a * 10 + b] >= (c * 10 + d))//保证日是合法的
{
if (((a + 1) == b) && ((a + 2) == c))//判断前三个数是否合法
e++;
else
if (((b + 1) == c)&&((b + 2) == d))//判断后三个数是否合法
{
e++;
}
}
}
}
}
}
}printf("%d",e);
return 0;
}
注意:月份的合法性,
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有 n 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝
规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、
宽、高。
小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上
分别堆 L 、 W 、 H 的货物,满足 n = L × W × H 。
给定 n ,请问有多少种堆放货物的方案满足要求。
例如,当 n = 4 时,有以下 6 种方案: 1 × 1 × 4 、 1 × 2 × 2 、 1 × 4 × 1 、 2 × 1 × 2 、
2 × 2 × 1 、 4 × 1 × 1 。
请问,当 n = 2021041820210418 (注意有 16 位数字)时,总共有多少种
//方法一:三循环
int main()
{
long long n = 0,l,w,h;
int a = 0;
scanf("%lld", &n);
for (l = 1; l <= n; l++)
{
for (w = 1; w <= n; w++)
{
for (h = 1; h <= n; h++)
{
if (n == (l * h * w))
a++;
}
}
}printf("%d",a);
return 0;
}
//方法二:找因数,再选择判断
int main()
{
int arr[10000];
long long n,b;
int a = 0,c=0,l, w, h;
scanf("%lld",&n);
for (b = 1; b <= n; b++)
{
if (n % b == 0)
{
arr[c] = b;
c += 1;
}
}
for (l = 0; l <= c; l++)
{
for (w = 0; w <= c; w++)
{
for (h = 0; h <= c; h++)
{
if (n == (arr[l] * arr[h] * arr[w]))
a++;
}
}
}printf("%d", a);
return 0;
}
注意变量可以取值范围