哈喽,我是鸟哥,点赞关注支持一下,谢谢
文章目录
⛳1.门牌制作
思考:该题使用循环1-2020即可,每次循环需要判断每个位数是否为2,方法:三个if()判断是否有十位、百位、千位、有的情况下判断是否为2,是的话2的数字+1.答案624次
#include<iostream> #include<string> using namespace std; int main() { const n=2020; int ans=0; for(int i=1;i<=n;i++) { int t=i; while(t){ if(t%10==2) ans++; t/=10; } // cout<<i<<" "<<ans<<endl; } cout<<ans<<endl; return 0; }
⛳2.既约分数
思考:
1.最大公约数定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和较小数b之间的最大公约数
2.分子和分母均从1-2020循环,判断符合公约数为1的即为既约分数,数目+1。
#include<iostream> #include <stdio.h> using namespace std; int gcd(int a,int b ) { if(a%b==0) return b; else return gcd(b,a%b); } int main() { int ans=0; for(int i=1;i<=2020;i++) { for (int j=1;j<=2020;j++) { if(gcd(i,j)==1) ans++; } } cout<<ans<<endl; return 0; }
运行结果:2481215
⛳3.蛇形填数
分析:
第1行第1列为1,第2行第2列为5,相差4,=41
第2行第2列为5,第三行第3行为13,相差8,42第三行第3行为13,第四行第四列为25,相差12,4*3
sum=1
for(i=2,i<=20;i++)
sum=sum+(i-1)*4
#include <stdio.h> int main() { int i,sum=1; for(i=1;i<=20;i++) { sum=sum+(i-1)*4; printf("%d\n",sum); } return 0; }
运行结果,第20行20列为761
⛳4.跑步锻炼
分析:将日期从2000-1-1(周六)到2020-10-1(周四)进行循环,分别找出跑1km和2km的日期。可以将日期分解为年、月、日、周,四个变量。月初或者周初以及同时满足的情况都跑2千米,即当d1==1||week_num == 1时,跑2千米,其余情况都跑1千米。
#include<iostream> #include <stdio.h> using namespace std; int r[2][13]={{0,31,29,31,30,31,30,31,31,30,31,30,31},{0,31,28,31,30,31,30,31,31,30,31,30,31}}; int main() { int ans=0; int y1,m1,d1,week_num; y1=2000,m1=1,d1=1,week_num=6; while(!(y1==2020 && m1==10 && d1==1)) { if((d1==1)||(week_num==1)) ans=ans+2; else ans++; d1++; week_num++; if(week_num==8)week_num=1; int f=(y1%4==0&&y1%100!=0)||(y1%400==0)?0:1; if(d1>r[f][m1]){d1=1;m1++;} if(m1==13) {m1=1;y1++;} } cout<<week_num<<endl; ans=ans+2; cout<<"跑步里程:"<<ans<<"km"<<endl; return 0; }
运行结果:跑了8879千米。
⛳5.七段码
分析:每段二极管分发光(1)不发光状态(0),7次循环嵌套可以表示所有状态。对每种状态判断是否连续是记+1
方法二:七位二制进数可以表达所有状态,即循环1-127可以表达所有状态。用位运算对二制进数取出每位二进制的值,对每种状态判断是否连续是记+1
#include<iostream> #include<string> #include<cstring> #include<set> #include<queue> using namespace std; int a[100][100]; void init(){ a[0][1]=a[1][0]=a[0][5]=a[5][0]=1; a[1][2]=a[2][1]=a[1][6]=a[6][1]=1; a[2][6]=a[6][2]=a[2][3]=a[3][2]=1; a[3][4]=a[4][3]=1; a[4][6]=a[6][4]=a[4][5]=a[5][4]=1; a[5][6]=a[6][5]=1; } bool ok(int s){ queue<int> q; bool v[7]; int start; for(int i=0;i<7;i++) v[i]=false; for(int j=0;j<7;j++){ if((1<<j)&s){ start =j; break; } } q.push(start); v[start]=true; while(!q.empty()){ int u=q.front(); q.pop(); for(int y=0;y<7;y++) { if(((1<<y)&s)&&a[u][y]&&!v[y]){ q.push(y); v[y]=true; } } } for(int x=0;x<7;x++){ if(((1<<x)&s)&&!v[x])return false; } return true; } int main() { init(); int ans=0; for(int s=1;s<(1<<7);s++) { if(ok(s)) ans++; } cout<<ans<<endl; return 0; }