之前发了一篇完整的题解博客,几天之后发现了错误,修改之后居然说我与已有文章高度相似,没办法,只能分开写
门牌制作
题目: 小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字
符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个
字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
答案: 624
代码:
#include <iostream>
using namespace std;
int main()
{
int n,c=0;
for(int i=1;i<2021;i++)
{
n = i;
while(n>0)
{
if(n%10 == 2)
c++;
n /= 10;
}
}
cout << c;
return 0;
}
既约分数
题目: 如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如,3/4 , 5/2 , 1/8 , 7/1 都是既约分数。
请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1 和 2020)?
答案: 2481215
代码:
#include <iostream>
using namespace std;
int gcb(int a,int b)
{
if(b == 0)
return a;
else
return gcb(b,a%b);
}
int main()
{
int c=0;
for(int i=1;i<2021;i++)
{
for(int j=1;j<2021;j++)
{
if(gcb(i,j) == 1)
c++;
}
}
cout << c;
return 0;
}
蛇形填数
题目: 如下图所示,小明用从1开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15 …
3 5 8 14 …
4 9 13 …
10 12 …
…
容易看出矩阵第二行第二列中的数是5。请计算出矩阵第20行第20列的数是多少?
答案: 761
代码:
//方法一:根据蛇形的走向找规律,代码较为复杂
#include <iostream>
using namespace std;
int arr[1000][1000];
bool check(int i,int j)
{
if(i==19 && j==19)
return true;
else
return false;
}
int main()
{
int n=1,i=0,j=0;
arr[i][j] = n;
n++;
while(1)
{
arr[i][++j] = n;
if(check(i,j))
break;
n++;
while(j>0)
{
arr[++i][--j] = n;
if(check(i,j))
break;
n++;
}
if(check(i,j))
break;
arr[++i][j] = n;
if(check(i,j))
break;
n++;
while(i>0)
{
arr[--i][++j] = n;
if(check(i,j))
break;
n++;
}
if(check(i,j))
break;
}
cout << n;
return 0;
}
//方法二:找出第n行第n列的值的联系
//(1,1)=1;(2,2)=5;(3,3)=13;(4,4)=25;(5,5)=41
#include <iostream>
using namespace std;
int main()
{
int n=1,i=1;
while(i<20)
{
n +=4*i;
i++;
}
cout << n;
return 0;
}
跑步锻炼
题目: 小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了
激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
答案: 8879
代码:
#include <iostream>
using namespace std;
bool LeapYear(int year)
{
if((year%400==0)||(year%4==0 && year%100!=0))
return true;
else
return false;
}
int main()
{
int year=2000,month=1,day=1;
int week=6,sum=0;
int m[13] = {
0,31,28,31,30,31,30,31,31,30,31,30,31};
while(1)
{
if(LeapYear(year))
m[2] = 29;
else
m[2] = 28;
if(day==1 || week==1)
sum += 2;
else
sum += 1;
if(year==2020 && month==10 && day==1)
break;
//cout << year << "年 " << month << "月 " << week << endl;
day += 1;
if(day > m[month])
{
day = 1;
month += 1;
}
if(month > 12)
{
month = 1;
year += 1;
}
if(week+1 == 8)
week = 1;
else
week += 1;
}
cout << sum ;
return 0;
}