每日一练蓝桥杯C语言:2020年真题题集(B组)上

简介: 每日一练蓝桥杯C语言:2020年真题题集(B组)上


哈喽,我是鸟哥,点赞关注支持一下,谢谢


文章目录


⛳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,4
2

第三行第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;
}


相关文章
|
5月前
|
存储 人工智能 安全
C语言:选择+编程(每日一练Day15)
C语言:选择+编程(每日一练Day15)
80 2
|
5月前
|
编译器 C语言
C语言:选择+编程(每日一练Day3)
C语言:选择+编程(每日一练Day3)
59 0
|
5月前
|
C语言
C语言:选择+编程(每日一练Day5)
C语言:选择+编程(每日一练Day5)
50 3
|
5月前
|
C语言
C语言:选择+编程(每日一练Day13)
C语言:选择+编程(每日一练Day13)
58 0
|
12天前
|
人工智能 算法 测试技术
2023年第15届蓝桥杯模拟赛第二期(c语言)
2023年第15届蓝桥杯模拟赛第二期(c语言)
|
5月前
|
测试技术 C语言
C语言每日一练Day03——移除元素
C语言每日一练Day03——移除元素
|
5月前
|
C语言
C语言每日一练——Day02:求最小公倍数(3种方法)
C语言每日一练——Day02:求最小公倍数(3种方法)
|
5月前
|
C语言
C语言每日一练——Day01:求最大公约数(三种方法)
C语言每日一练——Day01:求最大公约数(三种方法)
|
5月前
|
存储 人工智能 C语言
C语言:选择+编程(每日一练Day16)
C语言:选择+编程(每日一练Day16)
53 3
|
5月前
|
C语言
C语言:选择+编程(每日一练Day14)
C语言:选择+编程(每日一练Day14)
59 2