【2023蓝桥杯】刷题笔记(C语言)

1、字符串包含最多的字符及其个数

#include<stdio.h>
int main()
{
  int i;
    char arr[1000] = { 0 };//定义字符串数组arr,初始化为0
    gets(arr);//从键盘输入字符串给arr

  // printf("%s\n",arr);//输出字符串数组
  // for(i=0;i<5;i++){
  //   printf("%c\n",arr[i]);//逐个输出字符串
  // }
 
    int take[26] = { 0 }, A = 0;//定义数组take
    //知道次数用for,不知道次数用while
    while (arr[A] != '\0')  //gets()输入时用'\0',getchar()用'\n'
    {
        take[arr[A] - 'a']++;//判断每个字符出现的次数,take[0]表示a出现的次数...
        A++;//往后循环
    }
    int max = 0, word = 0; //初始化
    for (A = 1; A <= 26; A++)
    {
        printf("%d",take[n-1]);//输出数组,直观的看到每个字符出现的次数
        if (take[A] > take[max]) //找出次数最大的数。A从1开始,因为max初试为0
        {
            max = A;
        }
    }
    printf("%c\n%d", 'a' + max, take[max]);
    return 0;
}

2、输出数组的三种方法

下标法
#include <stdio.h>
void main()
{
    int i;
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    for(i = 0 ;i < 10; i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
}
通过数组名计算数组元素地址,找出元素的值
#include <stdio.h>
void main()
{
    int i;
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    int *p;
    p = a;
    for( i = 0 ; i < 10 ; i++ )
    {
       printf("%d ",*(p+i) );

    }
    printf("\n");

}
用指针变量指向数组元素。
#include <stdio.h>
void main()
{
    int i;
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    int *p;
    for( p = a; p < (a+10) ;p++ )
    {
       printf("%d ",*p);

    }
    printf("\n");
}

计算数组元素个数sizeof()
#include <stdio.h>

int main()
{
    int arr[10] = { 0 };
    int sz = sizeof(arr) / sizeof(arr[0]);

    printf("%d\n", sz);
    return 0;
}

3、计算成绩的及格率和优秀率

#include <stdio.h>

int main() {
    int n,pass_num=0,excell_num=0;//初始化及格人数和优秀人数
    float pass_rate,excell_rate;//浮点型 及格率和优秀率
    int score; //学生分数
    scanf("%d",&n); //学生人数
    for(int i=0;i<n;i++){
        scanf("%d",&score);
        if(score>=85){
            excell_num++;
            pass_num++;
        }else if(score>=60){
            pass_num++;
        }
    }
    pass_rate=(pass_num*100.0)/n;
    excell_rate=(excell_num*100.0)/n;
    printf("%.0f%%\n%.0f%%",pass_rate,excell_rate);
    //输出浮点数的整数部分,不输出小数点和小数点以下部分。小数部分 4 舍 5 入。
    return 0;
}

4、请问要制作所有的 1到2020 号门牌,总共需要多少个字符 2?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int count=0;
  for(int i=1;i<=2020;i++)
  {
    for(int j=i;j>0;j=j/10)
    {
      if(j%10==2)
      {
      count++;
      }
    }
  }
  printf("%d",count);
  // 请在此输入您的代码
  return 0;
}
#include <stdio.h>

int main(){
    int count = 0;
    
    for (int i = 0; i < 2021;i++){
        int num = i;
        while(num){
            if(num % 10 == 2){
                count++;}
                num /= 10;
        }
    }    
    printf("%d", count);    
    return 0;
}

5、0 到 9 的卡片各 2021 张,共 20210 张,请问可以从 1 拼到多少?

#include <stdio.h>
int main(void)
{
  int i,t,sum=0;
  for(i=1;;i++)
  {
    for(t=i;t!=0;t/=10)
      if(t%10==1)
        sum++;
    if(sum>=2021)
      goto end;
  }
  end:printf("%d",i);
  return 0;
}
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{ int sum=2021;
int j;
for( j=1;j>0;j++){
  for(int i=j;i>0;i/=10){
    if((i%10)==1){
      sum--;
    }
  }
  while(sum==0)
 goto end;
}
end:printf("%d",j);
  return 0;
}
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  // 请在此输入您的代码
  int i;
  int sum=1;
  for(i=1;sum<2022;i++)
  {
    if(i%10==1){sum++;}  //个位为1
    if(i/100%10==1){sum++;} //百位
    if(i/10%10==1){sum++;}//十位
    if(i/1000==1){sum++;} //千位
  }
  printf("%d",i-1);
  return 0;
}

6、数字三角形路径最大和

#include <stdio.h>
#include <stdlib.h>
//注意:题目中向左下走的次数与向右下走的次数相差不能超过 1,它是最后走的次数之间的差,
//并不是每走一步的差。
int max(int a,int b)//求最大值
{
    return a>b?a:b;
    
}

int main(int argc, char *argv[])
{
  int n,sum=0;
  int a[105][105],f[105][105];//a数组用描述题目,f数组用来存储和值
  scanf("%d",&n);
  for(int i=1;i<=n;i++)
    for(int j=1;j<=i;j++)
      scanf("%d",&a[i][j]);//输入数据
  f[1][1]=a[1][1];//把开头第一个数直接给f数组
  for(int i=2;i<=n;i++)//从第二行遍历开始
  {
      for(int j=1;j<=i;j++)
      {
          if(j==1) f[i][j]=f[i-1][j]+a[i][j];//每行f数组开头的数就等于a数组本身加上上一行的第一个数
          else if(i==j) f[i][j]=f[i-1][j-1]+a[i][j];//末尾的数和上一行相同
          else f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j];//重点,如果不是本身,则等于数组f的左上和右上的最大值加上数组a本身
      }
  }
  //找规律发现如果n为奇数时,最后必然走到最后行最中间的数,如果为偶数,则取中间两个数的最大值,
  //因为向左下走的次数与向右下走的次数相差不能超过 1
  if(n%2==1)  printf("%d",f[n][n/2+1]);//奇数情况下
  else printf("%d",max(f[n][n/2],f[n][n/2+1]));
  return 0;
}

7、购物单总价钱

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  // 请在此输入您的代码
  float a;
  int b;
  float sum=0;
  while(scanf("%f %d",&a,&b)!=EOF)
  {
    sum+=1.0*a*b/100;
    if(a==0&&b==0) break;
  }
  printf("%.2f",sum);
  // printf("5200");
  return 0;
}
  • EOF在scanf连用时代表-1的意思,当用到while(scanf()!=EOF),代表的意思是一直输入,直到scanf返回的值是-1时才会停止输入,也可以在while里面加上一些约束条件,使输入在特定的条件下就会停止,也可以在输入完成后按下Ctrl+z,可以强行停止输入

  • scanf这个函数是有一个返回值的, while(scanf("%d",&n)!=EOF) 当你在一直输入时,scanf不会返回-1,而当你通过某种方式,例如上面提到的ctrl+z停止输入后,scanf应该会返回-1,此时等价于EOF,那么这个循环就跳出停止

%.0f,表示不输出小数位,但要对第一位小数进行四舍五入
%.1f,表示保留一位小数,对第二位小数进行四舍五入

8、256MB 的空间可以存储多少个 3232 位二进制整数?

1MB = 1024KB 1KB = 1024字节(byte) 1字节 = 8位(bits)

%d 输出的是 int,
%ld 输出的是 long,
%lld 输出的是 long long;

int -2147483648~2147483647
long int -2147483648~2147483647
long long int -9223372036854775808~9223372036854775807
#include <stdio.h>

int main(void)
{
  // 1 MB = 1024 KB
  // 1 KB = 1024 Byte
  // 1 Byte = 8 bit
  long long count = 0;
  count = (256 * 1024 * 1024) / 4;
  printf("%lld",count);
  return 0;
}

9、成绩分析(最高分、最低分、平均分)

#include<stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  int n,scores[10000],max=0,min=100;
  float aver,num=0;
  scanf("%d",&n);
  for(int i=0;i<n;i++)
  {
    scanf("%d",&scores[i]);
    num+=scores[i];
    if(scores[i]>max)
      max = scores[i];
    if(scores[i]<min)
      min = scores[i];
  }
  aver=num/n;
  printf("%d\n",max);
  printf("%d\n",min);
  printf("%.2f",aver);
}

10、逆向冒泡排序

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  
  //冒泡排序   对有N个字母的字符串时 完全乱序时 需要交换N*(N-1)/2次数  
  //即最少需要15个字母
  //要求字典序最小 显然要取a-o这15个字典序最小的字母
  /*
    逆向思考 字符串经过100次交换后 得到正序字符串abcdefghijklmno
    而完全乱序的字符串onmlkjihgfedcba变成正序字符串需要105次交换  
    则将完全乱序的字符串交换5次即为所求答案
    而要求字典序最小 将j交换5次到字符串最前面 就得到了最小情况
    */
  printf("jonmlkihgfedcba");
  return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  int i,m,t,j;
  int n=0;
  while((n*n-n)/2<100){ //求最坏情况下的字符串长度  15
     n=n+1;
  }
  m=(n*n-n)/2-100;//比起完全逆序,字符串可以比完全逆序少m次比较  5
  int arr[n];
  for(i=0;i<n;i++){
      arr[i]=97+n-i-1;//arr[]为完全逆序字符串
  }
  for(i=5;i>0;i--){
    if(arr[i]<arr[i-1]){
      t=arr[i];
      arr[i]=arr[i-1];
      arr[i-1]=t;
    }
  }
  for(i=0;i<n;i++){
    printf("%c",arr[i]);
  }
  return 0;
}

11、闰年平年

#include<stdio.h>
int main(){
    int year=2000,day[7]={6,7,1,2,3,4,5},month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},i,j=0,sum=0;
    for(;year<=2020;year++){
        if(year%400==0||year%4==0&&year%100!=0)month[2]=29; //闰年,2月29天
        //能被400整除,或者能被4整除且不能被100整除
        else month[2]=28;  //平年2月28天
        for(int k=1;k<=12;k++){
          for(i=1;i<=month[k];i++){
              if(day[j%7]==1||i==1)sum++;//星期1且每月第一天
              sum++;
              j++;
              if(year==2020&&k==10&&i==1){
              printf("%d",sum);
              return 0;}
          }
        }
    }
}

12、等差素数数列

#include <stdio.h>
#include <stdlib.h>
 _Bool sushu(int b)
{
    for(int a=2;a<b/2;a++)
    {
        if(b%a==0)
        {
            return 0; //不是素数
        }
    }
    return 1;//是素数
}
int main(int argc, char *argv[])
{
  // 请在此输入您的代码
        int biaozhi=0;
    for(int i=2;i<50000;i++)  //枚举首项
    if(sushu(i)) //当首项是素数时  接着寻找下一项
    {
        for(int j=2;j<1000;j++)  //枚举公差
        {
            for(int t=0;t<10;t++)  //找10个 
            {
                if(sushu(i+j*t))  //等差数列公式:a[i+1]=a[1]+(n-1)d
                {
                    biaozhi++;
                }
                else{
                    biaozhi=0;
                    break;
                }
                if(biaozhi==10)
                {
                    printf("%d",j);
                    return 0;
                }
                
            }
             
         } 
     } 

  return 0;
}

13、能被n整除的数组成三位数出现的组合次数

//核心:通过判断三个数出现的组合次数。
#include<stdio.h>
typedef long long LL;
int main()
{
    LL n =4;   // i=1 1 4; 1 2 2; 1 3 不满足。i=2 不满足,退出循环
    //LL n =6;   // i=1 1 6; 1 2 3; 1 3 不满足
    //LL n =9;    //i=1 1 9; 1 2 不满足;1 3 3;1 4 不满足 
    //i每次都是从1开始,j每次都是从i开始,到根号n结束。因为当i=1时,j*j是满足条件的最后一种情况
    //当i和j都能被整除是,k的值就是 n/i/j。 首先只需要求出能被整除的数的依次顺序,下一步在求组合数。
    LL i,j,k;
    int res = 0;
    for(i = 1;i*i*i<=n;i++) //三个数相同i。i*i*i
        if(n% i == 0)  //并且i能被整除
            for(j = i;i*j*j<=n;j++) //此时从该数开始,找出后面相同的两个数j。i*j*j
                if(n/i%j == 0)  //并且j能被整除
                {
                    k = n/i/j;
                    if(i == j && i ==k) res++; //三个数相等,只有一个组合
                    else if(i == j || i == k || j == k) res += 3;//两个相等,3种组合
                    else res += 6;//三个不相同的数,有6中组合方式
                }
    printf("%d",res);//输出最后的总的组合数
    // printf("2430"); n=2021041820210418
    return 0;
}

14、连成一片的七段码数码管表达多少种不同的字符

回溯算法。 visit数组代表是否点亮。0表示灯不亮,用1表示灯亮。
思路是一段的数量=该段自己亮+该段亮且连通分支的数量。 
最后由于每种情况都被算了两遍,故而要除以2 
#include <stdio.h>
int BackTrack(int graph[][7],int visit[],int n,int i){ 
    int count=1;
    for(int x=0;x<n;x++){
        if(visit[x]==0&&graph[i][x]!=0){
            visit[x]=1;
            count+=BackTrack(graph,visit,7,x);
            visit[x]=0;
        }
    }
    return count;
}
int main(){
    int graph[7][7]={
    {1,1,0,0,0,1,0},
    {1,1,1,0,0,0,1},
    {0,1,1,1,0,0,1},
    {0,0,1,1,1,0,0},
    {0,0,0,1,1,1,1},
    {1,0,0,0,1,1,1},
    {0,1,1,0,1,1,1}
  };
      int visit[7]={0};
      printf("%d",BackTrack(graph,visit,7,0)/2);
      return 0;
}

15、分子和分母的最大公约数是 1的分数

#include <stdio.h>
#include <stdlib.h>

#include<stdio.h>
int s(int a,int b)
{
    if(a%b==0)  return b;
    else  return s(b,a%b);
} 
int main()
{
    int sum=0;
    for(int i=1;i<=2020;i++){
        for(int j=1;j<=2020;j++){
            if(s(i,j)==1)
                sum++;
        }
    }
    printf("%d",sum);
    return 0;
}

16、输入一行包含一个整数,表示时间

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  // 请在此输入您的代码
    long long n;
    scanf("%lld",&n);
    n/=1000;        //1s=1000ms
    int h=n/60/60%24;   //除分秒%24小时上限
    int m=n/60%60;  //除秒%60分钟上限
    int s=n%60;     //同理
    printf("%02d:%02d:%02d",h,m,s); //%02d,不足两位补0
                                   //%2d,去掉0就默认不足两位补空格
    return 0;     
}

17、数列求值

给定数列 1, 1, 1, 3, 5, 9, 17,⋯,从第 4项开始,每项都是前 3 项的和。求第 20190324项的最后 44 位数字。

#include <stdio.h>
int main(void)
{
  int a=1,b=1,c=1,d,i;
  for(i=4;i<=20190324;i++)
  {
    # a b c 每次往后传递循环
    # a=b
    # b=c
    # c=a+b+c
    d=(a+b+c)%10000;
    a=b;
    b=c;
    c=d;
  }
  printf("%04d",d); # 前面有0就可以用%04d解决
  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/273274.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于 闰年 的小知识,为什么这样判断闰年

闰年的规定&#xff1a; 知道了由来&#xff0c;我们就可以写程序来判断&#xff1a; #include <stdio.h> int main() {int year, leap;scanf("%d",&year);if((year%4 0 && year%100 ! 0) || year%400 0)leap 1;else leap 0;if(leap) printf(…

centos破解root密码以及如何防止他人破解root密码

目录 破解root密码 服务器重启 1.再重启页面上下选择第一个按e进入内核编辑模式 2.找到linux16开头的一行&#xff0c;光标移动到最后添加 init/bin/sh Ctrlx 保存 3.进入单用户模式 4.重新挂在根分区 5.关闭selinux 6.更新密码 passwd 7.在根分区下面创建一个隐藏文件…

【设计模式】-工厂模式

工厂模式是一种创建型设计模式&#xff0c;它提供了一种在不指定具体类的情况下创建对象的方法。工厂模式的核心思想是将对象的创建与使用分离&#xff0c;降低系统的耦合度&#xff0c;使系统更加灵活、可扩展。 工厂模式主要分为三种类型&#xff1a;简单工厂模式、工厂方法…

CLIP解读

1、引言 在计算机视觉领域&#xff0c;通常需要经过训练模型来实现对预定类别目标预测&#xff08;如分类、检测等任务&#xff09;&#xff0c;但是这种形式会限制模型的通用性。比如我们训练完了一个猫狗分类模型&#xff0c;如果现在希望识别一只老虎&#xff0c;那么原来训…

Java基础-lambda表达式

lambda表达式 前言前置知识λ小故事函数式编程起源: λ演算法 概念Lambda && 匿名类无参类型的简写带参函数的简写 简写的依据自定义函数接口lambda && 匿名类JVM层面区别匿名内部类实现Lambda表达式实现推论,this引用的意义 lambda && 集合 前言 函数…

C++_day6:继承、多态

1.封装一个动物的基类&#xff0c;类中有私有成员&#xff1a;姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有&#xff1a;指针成员&#xff1a;腿的个数&#xff08;整型 int count&#xf…

arcgis 点连接到面(以地级市图层为例)

地级市图层进行“点到面”的连接&#xff0c;并输出 在点击地级市图层&#xff0c;右击——连接和关联——连接 选择基于空间位置的另一图层数据&#xff0c;文件选择上面输出并添加的图层文件&#xff0c;进行“点到面”的连接&#xff0c;可依据新需求选择平均值&#xff0c…

upload-labs-pass01

1.安装好环境进入关卡&#xff08;记得打开小皮&#xff09; 2.可以看到第一关是要求上传图片&#xff0c;但是同时限制了图片类型&#xff0c;那么如果我们将木马写入图片&#xff0c;但是类型又不在白名单&#xff0c;就要想办法绕过 3.可以看到这里的要求是有check&#xff…

1.中医学习-总论

目录 1.为什么要学中医 2.什么是中医 介绍 中医例子1&#xff1a; 中医例子2: 中医最高境界“大道至简” 中医讲究的是本质 中医核心&#xff1a;阴阳、表里、寒热、虚实 ​编辑医不叩门 3.阴阳 1.一天中的阴阳 2.一年中的阴阳 3.阴阳之间的关系 4.阴阳四季的变化 …

使用exe4j将java项目打包为exe文件(包含普通maven项目打jar包)

目录 背景实操普通maven项目打jar包手动构建修改pom文件 使用exe4j工具官网下载配置 注意事项&#xff08;锦囊&#xff09;jdk11没有jre文件夹生成独立的jre文件夹&#x1f302;经雨者&#xff0c;愿为人遮风挡雨&#xff08;jdk11直接生成的jre不行&#xff09;指定环境 过程…

PostgreSQL中vacuum 物理文件truncate发生的条件

与我联系&#xff1a; 微信公众号&#xff1a;数据库杂记 个人微信: iiihero 我是iihero. 也可以叫我Sean. iiheroCSDN(https://blog.csdn.net/iihero) Sean墨天轮 (https://www.modb.pro/u/16258) 数据库领域的资深爱好者一枚。 水木早期数据库论坛发起人 db2smth就是俺&am…

牛客题霸-SQL入门篇(刷题记录二)

本文基于前段时间学习总结的 MySQL 相关的查询语法&#xff0c;在牛客网找了相应的 MySQL 题目进行练习&#xff0c;以便加强对于 MySQL 查询语法的理解和应用。 以下内容是牛客题霸-SQL入门篇剩余的第 21-39 道题目的 SQL 代码答案。 由于涉及到的数据库表较多&#xff0c;因…

通过调整报文偏移解决CAN应用报文丢帧或周期过长问题

偏移原理 报文很多都是周期性发送的&#xff0c;但是如果每条报文都以一开始作为开始计时的时间点&#xff0c;也就是一开始就发送第一条报文&#xff0c;可能会导致CAN堵塞&#xff0c;导致丢帧或者某些报文某一时刻周期过长&#xff0c;就像下图这样&#xff0c;同一时刻CAN…

RVA和FOA转换---三

文章目录 修改初始值RVA和FOA转换RVAFOARVA和FOA的关系 本次内容包含如何修改程序中的初始值&#xff0c;和如何转换内存和文件的地址。 修改初始值 问题&#xff1a; 我们写了一个程序&#xff0c;可以输出一个结果&#xff0c;那么我们可以通过修改PE文件来改变这个输出结果…

数据结构与算法Bonus-KNN问题的代码求解过程

一、问题提出 &#xff08;一&#xff09;要求 1.随机生成>10万个三维点的点云&#xff0c;并以适当方式存储 2.自行实现一个KNN算法&#xff0c;对任意Query点&#xff0c;返回最邻近的K个点 3.不允许使用第三方库(e.g.flann&#xff0c;PCL,opencv)! 4.语言任选(推荐…

【JS逆向学习】猿人学第六题 js混淆 回溯

逆向目标 网址&#xff1a;https://match.yuanrenxue.cn/match/6接口&#xff1a;https://match.yuanrenxue.cn/api/match/6参数&#xff1a;payload(m、q) 逆向过程 老规矩&#xff0c;先来分析网络请求&#xff0c;加密的地方一目了然&#xff0c;没什么可多说的&#xff…

数目之差

解法一&#xff1a; 显然只需让多的在限度内最多即可 #include<iostream> #include<algorithm> using namespace std; #define endl \n void solve() {int n, k, num0 0, num1 0;cin >> n >> k;string s;cin >> s;for (int i 0; i < s.s…

【Paper Reading】6.RLHF-V 提出用RLHF的1.4k的数据微调显著降低MLLM的虚幻问题

分类 内容 论文题目 RLHF-V: Towards Trustworthy MLLMs via Behavior Alignment from Fine-grained Correctional Human Feedback 作者 作者团队&#xff1a;由来自清华大学和新加坡国立大学的研究者组成&#xff0c;包括Tianyu Yu, Yuan Yao, Haoye Zhang, Taiwen He, Y…

upload-labs 0.1 靶机详解

下载地址https://github.com/c0ny1/upload-labs/releases Pass-01 他让我们上传一张图片&#xff0c;我们先尝试上传一个php文件 发现他只允许上传图片格式的文件&#xff0c;我们来看看源码 我们可以看到它使用js来限制我们可以上传的内容 但是我们的浏览器是可以关闭js功能的…

【Spring MVC】Spring MVC拦截器(Interceptor)

目录 一、拦截器介绍 二、拦截器 Interceptor 定义 2.1 HandlerInterceptor接口 2.2 Spring MVC中提供的一些HandlerInterceptor接口实现类 1、AsyncHandlerInterceptor 2、WebRequestInterceptor 3、MappedInterceptor 4、ConversionServiceExposingInterceptor 三、拦…
最新文章