技术标签: 算法 c语言 数据结构和算法 Powered by 金山文档 蓝桥杯 数据结构
#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;
}
下标法
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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,表示保留一位小数,对第二位小数进行四舍五入
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;
}
#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);
}
#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;
}
#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;}
}
}
}
}
#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;
}
//核心:通过判断三个数出现的组合次数。
#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;
}
回溯算法。 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;
}
#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;
}
#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;
}
给定数列 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;
}
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland