目录
一.第一题
1.问题:小蓝制作门牌号
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
2.解题过程
(1)方法1(数字转化法)
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;
}
(2)方法2(转化数字个位比较法)
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("