1. 输入带空格的字符串

    应该用fgetsscanf遇到空格时会停止读取,后续内容被截断

    fgets用法如下:

1
fgets(input, sizeof(input), stdin);
  1. 快速排序

​ 需要自己先定义一个函数compare(函数名可不为compare)

1
2
3
4
5
int compare(const void *a, const void *b) {
int num1 = *(int*)a;
int num2 = *(int*)b;
return num2 - num1; // 返回正数时,num1 排在 num2 后面(实现降序)
}

​ 使用时如下:

1
qsort( arr , n , sizeof ( int ) , compare );	//arr是数组名,n为数组的长度, compare为上面需要自己定义的函数

​ 二编:好麻烦不想用qsort了,otto教了一个c++的sort写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>		//万能头文件
using namespace std;

bool compare(int a, int b){
return a < b; //改成 > 后会变成降序排序
}

int main()
{
// 请在此输入您的代码
int n;
scanf("%d", &n);

int a[n + 1];
for (int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}

sort(a + 1, a + n + 1, compare); //a + 1是数组的起始位置(我是从1开始写的)
//a + n + 1是结束位置的下一位

// for (int i = 1; i <= n; i++){
// printf("%d ", a[i]);
// }

return 0;
}
  1. 异或运算

​ 如果出现**⊕这个符号,则是要求进行异或运算**:

  • 如果两个位相同(都是0或都是1),结果为0。

  • 如果两个位不同(一个为0,另一个为1),结果为1。

    在c语言使用“ ^ ”符号表示,使用如下:

1
int result = 5 ^ 3;	//0101 ^ 0011 = 0110 , result = 6
P Q P⊕Q
0 0 0
0 1 1
1 0 1
1 1 0

真值表如上

  1. 二进制取反

    需要使用符号 ~ 。如”~0”则表示一个32位数都为1的整数

  2. 字符串匹配

    最简单的字符串匹配:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
char S[100000],T[100000];//定义的字符串
scanf("%s", S);
scanf("%s", T);

int s = strlen(S);
int t = strlen(T);

for (int j = 0; j < s; j++){
int result = 0;

for (int i = 0; i < s && i + j < s; i++) {
if (S[i + j] == T[i]){
result++;
}else if(S[i + j] != T[i] || S[i + j] == " "){
break;
}
}
}

(tips:”%s” 是输入字符串,”%c” 只能读取首个字符)

  1. 指数的表示方法

    在c语言中 “^” 是取反的意思,表示指数需要用以下方法

    1
    pow(a,x);//a是底数,x是幂,记得要使用math.h函数库
  2. 真值计算

    常见的连接词如下:

    • 合取(∧):P 和 Q 都为 1 时结果为 1,否则为 0。

      int result = P && Q; //逻辑与

    • 析取(∨):P 或 Q 中至少有一个为 1 时结果为 1,否则为 0。

      int result = P || Q; // 逻辑或

    • 蕴含(→):当 P 为 1 且 Q 为 0 时结果为 0,其他情况为 1。

      int result = (!P) || Q; // 蕴含的逻辑等价式

    • 等价(↔):P 和 Q 真值相同时结果为 1,否则为 0。

      int result = (P == Q); // 等价

    • 非(¬):单目运算,取反。

      int result = !P; //逻辑非

    • 异或(⊕):P、Q值相同时为1,否则为0。

      int result = P ^ Q; //逻辑异或


​ 打完了,300块也捐了T T