怎么在蓝桥杯多拿点分

蓝桥杯常考的算法有:1.枚举(暴力)2. 递归 3.贪心 4.搜索(dfs和bfs)等基础算法。难度比较大的是动态规划。

严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
能用到的函数,比如sort、next_permutation等,STL同理。

可以引用的库类函数(可以用于判断):

islower(a):判断是不是小写,返回布尔值
isupper(a):判断是不是大写,返回布尔值
toupper(a):转化成大写 ,返回转化后的大写字符
tolower(a):转化成小写,返回转化后的小写字符
这几个方法,头文件是include< ctype.h >

swap函数

用于交换两个数的值

#include<iostream>
using namespace std;
 int main()
{
 int a = 1;
 int b = 2;
 swap(a, b);
 std::cout<<a<<" "<<b<<std::endl;
  return 0;
}

pow函数

2.14
pow函数的作用是求幂。
数学公式:计算x的y次幂;
返回值:x不能为负数且y为小数,或者x为0且y小于等于0,返回幂指数的结果;
返回类型:double型。例如,求3的6次方:

#include <stdio.h>
#include <math.h>
int main() 
{
	double x = 3, y = 6;  //为变量赋初值   
	double result = pow(x, y);  //求a的b次方  
	 printf("%lf\n", result);    
	 return 0;
}

字符串函数(String processing function)

也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数,如C,pascal,Visual以及LotusScript中进行字符串拷贝,计算长度,字符查找等的函数。

strcpy

原型:extern char *strcpy(char *dest,char *src);
用法:#include <string.h>
功能:
把src所指由NUL结束的字符串复制到dest所指的数组中。
返回指向dest结尾处字符(NUL)的指针。

strcat

原型:extern char *strcat(char *dest,char *src);
用法:#include <string.h>
功能:
把src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0’)并添加’\0’。
返回指向dest的指针。

strlen

原型:extern int strlen(char *s);
用法:#include <string.h>
功能:计算字符串s的长度
说明:返回s的长度,不包括结束符NULL。

strncpy

原型:extern char *strncpy(char *dest, char *src, int n);
用法:#include <string.h>
功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。
说明:
1.如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。
2.如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。
3.src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

strcmp

功 能: 将一个串与另一个比较
用 法: int strcmp(char *str1, char *str2);

reverse函数

2.25
标准C中是没有reverse()函数的,这是C++的一个新增函数,reverse()函数可以对字符串进行反转操作,头文件是#include< algorithm >.
例如:
一、交换string字符串中元素的顺序

string str="woaini";
reverse(str.begin(),str.end());//str结果为iniaow

二、交换字符数组char[]中元素的顺序

char a[99] = "hello world";
reverse(a,a+strlen(a));

ceil函数

3.1
函数名: ceil
用 法: double ceil(double x);
功 能: 返回大于或者等于指定表达式的最小整数;向下取整,返回x的下一个最小值。
头文件:math.h
返回数据类型:double

sort函数

3.19
sort函数,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include<algorithm>的c++标准库中。
语法
Sort(start,end,cmp)
参数
(1)start表示要排序数组的起始地址;
(2)end表示数组结束地址的下一位;
(3)cmp用于规定排序的方法,可不填,默认升序
  例如对数组a[10]排序,sort(a,a+10)
实现从大到小的排序需要在sort()函数里的第三个参数。
需要加入一个比较函数compare(),此函数的实现过程如下:

#include<iostream>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{   
return a>b;
}
int main()
{
	int a[10]={9,6,3,8,5,2,7,4,1,0};
	for(int i=0;i<10;i++)
	cout<<a[i]<<endl;
 	 sort(a,a+10,compare);//在这里就不需要对compare函数传入参数了   
 	 for(int i=0;i<10;i++)
 	 cout<<a[i]<<endl;return 0;
 }

next_permutation函数

3.19
这个函数有个必要的前提,那就是你要全排列的数组要先按从小到大的顺序排列用sort就好,sort与next_permutation()用到的都是algorithm头文件。next_permutation函数是STL提供的用来计算排列组合关系的算法,
next_permutation()会取得(first,last)所标示之序列的下一个排列组合,如果没有下一个排列组合,便返回false;否则返回true。
比如:一、输出序列{1,2,3,4}字典序的全排列。

#include <iostream>
#include<algorithm>
using namespace std;
 
int main(int argc, char** argv) {
 int a[4]={1,2,3,4};
 sort(a,a+4);
 do{
  for(int i=0;i<4;i++)
      cout<<a[i]<<" ";
  cout<<endl;
 }while(next_permutation(a,a+4));
 return 0;
}

二、输入任意一个字符串,输出其字典序的全排列

#include <iostream>
#include<algorithm>
using namespace std;
 
int main(int argc, char** argv) {
 string str;
 cin>>str;
 sort(str.begin(),str.end());
 do{
  cout<<str<<endl;
 }while(next_permutation(str.begin(),str.end()));
 return 0;
}

三、7个数的集合为{1, 2, 3, 4, 5, 6, 7},要求出第n=1654个排列。

#include <iostream>
#include<algorithm>
using namespace std;
 
int main(int argc, char** argv) {
 int a[7]={1,2,3,4,5,6,7};
 sort(a,a+7); 
 int n=0;
 do{
  if(n==1654){
      for(int i=0;i<7;i++)
              cout<<a[i];
            cout<<endl;
        break;
  }
        n++;
    }while(next_permutation(a,a+7));
 return 0;
}

常用的函数模板

1.判断闰年
闰年:
能被4整除,不能被100整除。
能被4整除,也能被100整除。(能被400整除)

 if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ){
 std::cout << year << " is 闰年" << std::endl;
}

2.筛选素数
素数又叫质数,即只能被1和自身整除的数,所以除了2以外的所有偶数都不是素数。这个数若不是素数,那么必然有两个因子,两个因子相等的时候,即是这个数的开方。

//筛选法求100以内的素数
//需要注意for循环截止条件是i<sqrt(n)
//因为对于一个整数n,其是否为素数,在所有小于其平方根的数已经判断完毕,没必要再增加工作量判断到n-1。
#include<stdio.h>
#include<math.h>
int main()
{
 int n;
 int i;
 int flag=0;
 for(n=2;n<=100;n++)
 {
  flag=0;
  for(i=2;i<=sqrt(n);i++)
  {
   if(n%i==0)
    {
     flag=1;
     break;
    }
  }
  if(flag==0)
   printf("%d ",n);
 }
  return 0;
}

3.最大公约数和最小公倍数
求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数
求最大公约数算法:辗转相除法
有两整数a和b:① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:27÷15 余12,15÷12余3,12÷3余0
因此,3即为最大公约数

1 #include<stdio.h>
 2 int main()   /*  辗转相除法求最大公约数 */ 
 3 { 
 4    int m, n, a, b, t, c;
 5    printf("输入两个整数:\n");
 6    scanf("%d%d", &a, &b);
 7    m=a;   n=b;
 8    while(b!=0)  /* 余数不为0,继续相除,直到余数为0 */ 
 9    { c=a%b;
        a=b; 
        b=c;
10    printf("最大公约数是:%d\n", a);
11    printf("最小公倍数是:%d\n", m*n/a);
12 }

  • 13
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你小汁完了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值