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

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

#include<stdio.h>
int main()
{int i;char arr[1000] = { 0 };//定义字符串数组arr,初始化为0gets(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,不知道次数用whilewhile (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++;}  //个位为1if(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为奇数时,最后必然走到最后行最中间的数,如果为偶数,则取中间两个数的最大值,//因为向左下走的次数与向右下走的次数相差不能超过 1if(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 bitlong 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){ //求最坏情况下的字符串长度  15n=n+1;}m=(n*n-n)/2-100;//比起完全逆序,字符串可以比完全逆序少m次比较  5int 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*iif(n% i == 0)  //并且i能被整除for(j = i;i*j*j<=n;j++) //此时从该数开始,找出后面相同的两个数j。i*j*jif(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=2021041820210418return 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=1000msint 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+cd=(a+b+c)%10000;a=b;b=c;c=d;}printf("%04d",d); # 前面有0就可以用%04d解决return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让el-input与其他组件能够显示在同一行

让el-input与其他组件能够显示在同一行 说明&#xff1a;由于el-input标签使用会默认占满一行&#xff0c;所以在某些需要多个展示一行的时候不适用&#xff0c;因此需要能够跟其他组件显示在同一行。 效果&#xff1a; 1、el-input标签内使用css属性inline 111<el-inp…

GPT-5:人工智能的下一个前沿即将到来

当我们站在人工智能新时代的门槛上时&#xff0c;GPT-5即将到来的呼声愈发高涨且迫切。作为革命性的GPT-3的继任者&#xff0c;GPT-5承诺将在人工智能领域迈出量子跃迁式的进步&#xff0c;其能力可能重新定义我们与技术的互动方式。 通往GPT-5之路 通往GPT-5的旅程已经标记着…

Annaconda环境下ChromeDriver配置及爬虫编写

Anaconda环境的chromedriver安装配置_anaconda 配置chromedriver-CSDN博客 Chromedriver驱动( 121.0.6167.85 ) - 知乎 下载好的驱动文件解压&#xff0c;将exe程序复制到Annaconda/Scripts目录以及Chrome/Application目录下 注意要提前pip install selenium包才能运行成功&a…

GCNv2_SLAM-CPU详细安装教程(ubuntu18.04)

GCNv2_SLAM-CPU详细安装教程-ubuntu18.04 前言一、安装第三方库1.安装Pangolin2.安装OpenCV3.安装Eigen4.安装Pytorch(c) 二、安装以及运行GCNv2_SLAM1.安装编译GCNv2_SLAM2.单目模式运行演示案例 总结 前言 paper:https://arxiv.org/pdf/1902.11046.pdf githup::https://gith…

为什么要用scrapy爬虫库?而不是纯python进行爬虫?

为什么要用scrapy爬虫库&#xff1f;而不是纯python进行爬虫&#xff1f; Scrapy的优点Scrapy节省的工作使用纯Python编写爬虫的不足 Scrapy是一个使用Python编写的开源和协作的web爬虫框架&#xff0c;它被设计用于爬取网页数据并从中提取结构化数据。Scrapy的强大之处在于其广…

matlab调用nlopt时向目标函数中传入数据的案例

matlab调用nlopt时向目标函数中传入数据的案例&#xff0c;如代码所示&#xff1a; clc,clear,close allopt.algorithm NLOPT_LN_AUGLAG; opt.lower_bounds -10; opt.upper_bounds 10; opt.min_objective (x) goal_function(x,[1,2,3,4,5,6,7,8,9]); opt.xtol_rel 1e-8; …

java垃圾回收-三色标记法

三色标记法 引言什么是三色标记法白色灰色黑色 三色标记过程三色标记带来的问题多标问题漏标问题 如何弥补漏标问题增量更新原始快照总结 引言 在CMS,G1这种并发的垃圾收集器收集对象时&#xff0c;假如一个对象A被GC线程标记为不可达对象&#xff0c;但是用户线程又把A对象做…

基于微信小程序的作业管理系统的设计与实现【附项目源码】分享

基于微信小程序的作业管理系统的设计与实现&#xff1a; 源码地址&#xff1a;https://download.csdn.net/download/qq_41810183/88842836 一、引言 随着移动互联网的普及和微信小程序的广泛应用&#xff0c;教育领域也在积极探索如何利用这些新技术提升教学质量和效率。本需…

基于word2vec 和 fast-pytorch-kmeans 的文本聚类实现,利用GPU加速提高聚类速度

文章目录 简介GPU加速 代码实现kmeans聚类结果kmeans 绘图函数相关资料参考 简介 本文使用text2vec模型&#xff0c;把文本转成向量。使用text2vec提供的训练好的模型权重进行文本编码&#xff0c;不重新训练word2vec模型。 直接用训练好的模型权重&#xff0c;方便又快捷 完整…

工具篇--从零开始学Git

一、git概述 1.1安裝 windows版本 官方下载&#xff08;比较慢&#xff09;&#xff1a;Git - Downloads Linux版本 ​yum install git查看git版本。 git --version 1.2创建仓库gitee 注册账号 Gitee - 基于 Git 的代码托管和研发协作平台 新建仓库 honey2024 配置 git confi…

安装kibaba

官方地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 直接下载就可以 安装好了之后开始配置文件/kibana/config打开kibanba.yml server.port:5601 服务器地址 sercer.name:kibana 服务器名称 kibana.index:.kibana 索引 elasticsearch.hosts:[http://1…

Kafka是什么,以及如何使用SpringBoot对接Kafka

系列文章目录 上手第一关&#xff0c;手把手教你安装kafka与可视化工具kafka-eagle 架构必备能力——kafka的选型对比及应用场景 Kafka存取原理与实现分析&#xff0c;打破面试难关 防止消息丢失与消息重复——Kafka可靠性分析及优化实践 Kafka是什么&#xff0c;以及如何使用…