蓝桥杯刷题(四)

简介: 蓝桥杯刷题(四)

蓝桥杯刷题(四)
1.时间显示(注意审题)
2.七段码
3.路径
4.年号字符
5.棋盘放麦子

蓝桥杯题库

1.时间显示(注意审题)

这道题其实很简单,但我在提交时却总是通过不了…因为题目要求输入的时毫米,我把它看成了秒…找了半天都不知道错在了哪

include <stdio.h>

int main()
{

long long t = 0,n=0;
scanf("%lld", &t);
 n=t/1000;//将毫秒转化为秒
long long day = n / 86400;//算出一共有多少天,注意这里除的是整数所以小数部分会自动舍弃
long long oneday = n - 86400 * day;//算出最后一天剩下多少秒
long long oneday_h = oneday / 3600;//算出这一天有多少小时
printf("%.2lld:", oneday_h);
long long oneday_m = (oneday - oneday_h * 3600) / 60;//算出有多少分
printf("%.2lld:", oneday_m);
long long oneday_s = oneday - oneday_h*3600-oneday_m * 60;//算出有多少秒
printf("%.2lld", oneday_s);
return 0;

}

2.七段码

这道题建议手撸,暴力法

include <stdio.h>

include <stdlib.h>

int main(int argc, char *argv[])
{
// 请在此输入您的代码
int sum = 0;


//有一段二极管发光; a,b,c,d,e,f,g
int l1 = 7;
//有两段二极管发光; ab,af,bc,bg,cg,cd,de,eg,ef,fg
int l2 = 10;
//有三段二极管发光; abf,abc,abg,afg,afe,bcd,bcg,bgf,bge,cgd,cgf,cge,cde,cdg,deg,def,efg
int l3 = 16;//
//有四段二极管发光; abcd,abcg,abcf,abge,abgf,abfe,afeg,bcde,bcdg,bcgf,bcge,bged,bgef,cdef,cdeg,cdgf,cgfa,cgfe,defg,defa
int l4 = 20;
//有五段二极管发光即有两端不发光; ab,ac,ad,ae,af,ag,bc,bd,be,bg,cd,cf,cg,de,df,dg,ef,eg,fg
int l5 = 19;//
//有六段二极管发光即有一端不发光; a,b,c,d,e,f,g
int l6 = 7;//(找一段二极管不发光的:)
//第七种情况,全部发光
int l7 = 1;

sum = l1 + l2 + l3 + l4 + l5 + l6 + l7;
printf("%d\n", sum);

return 0;
}

当然也可以用程序写出来,但很麻烦,反正我是手算的

include<stdio.h>

include<stdlib.h>

int main(){

int a,b,c,d,e,f,g;

int number=0;

for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
for(d=0;d<=1;d++)
for(e=0;e<=1;e++)
for(f=0;f<=1;f++)
for(g=0;g<=1;g++)
{
    if((a==1&&(b==1||f==1))||a==0)
    if((b==1&&(a==1||g==1||c==1))||b==0)
    if((c==1&&(b==1||g==1||d==1))||c==0)
    if((d==1&&(c==1||e==1))||d==0)
    if((e==1&&(g==1||d==1||f==1))||e==0)
    if((f==1&&(a==1||g==1||e==1))||f==0)
    if((g==1&&(f==1||b==1||e==1||c==1))||g==0){
        if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0&&g==0)
        break;
        else
        number++;
    }
}

printf("%d",number+7-3);
}

3.路径

这道题其实用到了一个枚举累加的方法,得出每两个点之间(注意是每两个点的)的最小公倍数,然后取最小的,依次相加

include <stdio.h>

include <stdlib.h>

int gcd(int x,int y)
{
int r;
r=x%y;
while(r!=0)
{

x=y;
y=r;
r=x%y;

}
return y;
}//辗转相除法求最大公因数

int lcm(int x,int y)
{
return (x*y/gcd(x,y));
}//最小公倍数

int min(int a,int b)
{
return a<b?a:b;
}//得出小的那个

int main()
{
int i=1;
int j;
int f[2022]={0};
for(i=1;i<=2021;i++)
{

for(j=i+1;j<=i+21&&j<=2021;j++)//依次得出i点到它后面21个点的公倍数
{
  if(f[j]==0)//如果这个j位置还没存放公倍数
  {
    f[j]=f[i]+lcm(i,j);//那么就放入从i点到该点的公倍数并加上之前走的路径长度
  }
  else
  {
    f[j]=min(f[j],f[i]+lcm(i,j));//如果该点已经存放了一个公倍数,那么就意味着之前已经计算过从某一个i点到该点的公倍数(因为多个不同点可以到达同一点),比较现在的i点到该点的公倍数,取较小的
  }
}

}
printf("%d",f[2021]);
return 0;
}

4.年号字符

这道题很简单,推荐使用暴力手算法,其实本质上就是一个26进制的转换,当然我在这还是演示一下程序写法

include <stdio.h>

int main()
{
int n=2019,j=0,len=0;
char arr[10]={0};
while(n%26!=0)
{

arr[j++]=(n%26-1)+'A';
n=n/26;

}//辗转相除法
for(int i=0;i<10;i++)
{
if(arr[i]!=0)
{

 len++;

}
}
for(int i=len-1;i>=0;i--)
{
printf("%c",arr[i]);
}//将每个字符逆序打印出来
return 0;
}

5.棋盘放麦子

相信大家在小时候就听过这个故事,其实这道题很简单,就是求2的多少次方再累加,但需要注意的是溢出,这里只有unsigned long long(2^64-1)能放下

include <stdio.h>

include<math.h>

int main()
{
unsigned long long i=0,sum=0,k=0;
for(i=0;i<64;i++)
{

k=(long long)pow(2,i);
sum+=k;

}
printf("%llu",sum);
return 0;
}

相关文章
|
4月前
|
算法
刷题之Leetcode34题(超级详细)
刷题之Leetcode34题(超级详细)
43 0
|
4月前
|
算法
刷题之Leetcode704题(超级详细)
刷题之Leetcode704题(超级详细)
29 0
|
4月前
刷题之Leetcode54题(超级详细)
刷题之Leetcode54题(超级详细)
22 0
|
4月前
刷题之Leetcode160题(超级详细)
刷题之Leetcode160题(超级详细)
49 0
|
4月前
|
索引
leetcode151刷题打卡
leetcode151刷题打卡
29 0
|
Java 测试技术 C语言
leetcode刷题(5)
各位朋友们,大家好,今天是我leedcode刷题的第五篇,我们一起来看看吧。
|
测试技术 索引
leetcode刷题(2)
各位朋友们,又是新的一天,不知道大家过得怎样?今天是我leedcode刷题系列的第二篇,那么废话不多说,直接进入我们今天的主题。
|
算法 API C++