关于蓝桥杯竞赛的一些小问题。(备赛 and 参赛)

最基础 的开始吧:
比如输入啥的, 那好吧,就输入了。(简单放一点在这里)。
但是在输入之前, 先列举以下写代码的框架。(很low反正你们都知道qwq

// 这是写代码的模板, 请你开始写代码第一件事就是将下面写出来
#include
#include// 万能头文件, 蓝桥杯是支持的。可以用。
// 这里添加变量
// 这里后面可以添加函数
int main(){
	// 这里写代码。。。。。
	return 0;// 注意要return 0;
}

好了开始输入

对于输入来说 比如题目 :
第一行输入一个数 N ,接下来一行 ( 或者 N 行,每行一个数字 ) 。
接下来是数据范围(题目会给,一般在题目最后, 题目中或许会隐含有范围要注意)。
对于10%的数据 0 <= N <= 100
对于30%的数据 0 <= N <= 1000
对于100%的数据 0 <= N <= 50000

那么 请仔细看 注释注释
下面开始正式写代码。

#include
int MAX = 50005;// 这里是50000 + 5  也就是100%的数据范围 + 5, 定义在这里
int N = 0; // 这样的数据定义为全局变量方便使用。
int num[MAX] = {};// 定义一个数组存放数据  
// 用MAX做为数组长度
// = {};  是初始化数组数据为0;
int main(){
	// 对于输入一律用scanf, 不管是字符串还是啥。(~~当然还有快读,但是蓝桥杯用不到~~ )
	scanf("%d", &N);// 输入N ~~记得取址符号~~ 
	for(int i = 0; i < N; ++i){// 最简单的循环
		scanf("%d", num + i);// 输入N行数据
	}// 输入结束
	return 0;// 注意要return 0;
}

end
好了输入差不多就这样, 我一时也想不起来。

输出:

这里接着上面的题目写。
题目:
你需要输出这 N 个数的逆序对的个数。(就是输出一个数)。
接着上面的程序继续。

#include
int MAX = 50005; 
int N = 0;  
int num[MAX] = {}; 

/
int answer = 0;// 根据题目要求新增一个变量, 用来记录答案,
// 如果答案是一串数字需要用数组。
/
 
int main(){
	scanf("%d", &N); 
	for(int i = 0; i < N; ++i){ 
		scanf("%d", num + i); 
	}// 输入结束
	
	// 假设你已经计算完结果

	// 那么这里可以开始输出
	printf("%d\n", answer);// 注意格式(格式不对可能没分),后面一般要跟一个换行符, 就是输出最后一行后要换行。 
	
	return 0; 
}

end
输出好像也没啥好说的, 可能遇到了才想得起来。就这样吧。

杂项

这里是蓝桥杯官网得截图:
主要主要主函数return 0;
输入/出 long long数据需要使用的是

long long x = 0;
scanf("%I64d", &x);
printf("%I64d", x);

对于数组来说, 静态申请的一维数组最大长度大概为:

int num[500000000]; // int 可申请5*10的8次方左右
long long num[200000000]; // long long 可申请2*10的8次方左右

注:蓝桥杯最大栈空间为256MB,经过换算, 你最大可以开 1 * 10的7次方左右的数组空间。也就是1千万。如下:

在这里插入图片描述

数据的范围:
需要根据不同的取值范围,确定使用不同的数据类型。当超过20位的数据就要考虑其余的解法,或者自己写大数的运算了(这是我最不想遇到的)。

unsigned int 0~4294967295 // 9及以下位数都可装
int -2147483648~2147483647 // 9及以下位数都可装
unsigned long 0~4294967295 // 9及以下位数都可装
long -2147483648~2147483647 // 9及以下位数都可装
long long的最大值:9223372036854775807 // 18及以下位数都可装 19位也差不多
long long的最小值:-9223372036854775808 // 18及以下位数都可装 19位也差不多
unsigned long long的最大值:18446744073709551615 //20位
// 下面用的可能没有接触过, 但存在, 有上面的就够了, 下面和上面的long long 是一样的。
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615

关于蓝桥杯竞赛的一些小问题。(备赛 and 参赛)_第1张图片
当然还有蓝桥杯的最大栈空间是256MB。下面为截图。
关于蓝桥杯竞赛的一些小问题。(备赛 and 参赛)_第2张图片

一些简单的优化问题 * 不涉及算法(可能大家都知道)


1. 
// 当需要多次使用一个表达式的值的时候, 可以存起来。 这样可以减少计算次数。
// 如:
int n = 10;
int b = 30;
for(int i = 0; i < n; i++){
	printf("%d", n * b * i);
}
// 更改为
int n  = 10;
int b = 30;
int t = n * b;
for(int i = 0; i < n; i++){
	printf("%d", t * i);
}
// 如:
// 计算一个数组 / 或者字符串长度的时候, 最后一直存着,以免多次计算。 

2. 
// 位运算符的应用
// 如:
int n = 30;
int i =  n* 2;
int c =  n / 16;
// 可以更改为
int i = n << 1; // 相信我会快。
int c =  n >> 4;

// 如:
int i = 100;
while(i % 2 == 1){// 对于for循环同样使用。
i--;
}
// 改为
while(i & 1){ // 用位运算代替
--i;// 前自减/增 比 后自减/增快。
}

// 如:
int i = 0;
int x = i--;
// 改为
int x = i;
--i;// 这样结果一样, 但编译后,会少一条汇编指令。

end
暂时就这样吧,想不太多了。

你可能感兴趣的:(蓝桥杯练习)