文章目录
程序结构
执行T次循环
最简洁的写法是while(T–)
T = 5;
while(T--){
printf("%d", T);
}
将数字转换成d进制
// 转换进制
int ans[31] = {0}, num = 0;
do {
ans[num ++] = sum % d; // 每次取余
sum /= d; // 对余数进行下一轮计算
} while(sum != 0);
for(int i = num - 1; i >= 0; i--){ // 从高位开始输出
printf("%d", ans[i]);
}
变量类型
int
数据范围 [- 2 63 2^{63} 263, 2 63 2^{63} 263-1]
long long
数据范围 [- 2 31 2^{31} 231, 2 31 2^{31} 231]
long long a;
printf("%lld", &a);
double
printf("%lf", &a);
读入/输出
读入一组数据
数据个数n
int n;
scanf("%d", &n);
int a[n];
for(int i = 0; i < n; i++){
scanf("%d", &a[i]);
printf("%d", a[i]);
}
读入字符
读取字符时,为了防止读入空格,使用getchar()更好
getchar(c);
读入一串字符串
gets(str);
读入一系列字符串
定义二维数组:适用于输出一系列字符串,输出时请使用ans[i]
例如:
char ans[90][90];
for(int i = num - 1 ; i >= 0 ; i--) {
printf("%s", ans[i]);
if(i != 0) printf(" ");
}
字符串拼接
str = str1 + str2;
printf("%s", str);
函数
数学运算
abs()
绝对值
reverse
功能:逆序(或反转),多用于字符串、数组、容器。头文件是
#include <algorithm>
reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数无返回值
// 对字符串
string str="hello world , hi";
reverse(str.begin(),str.end());//str结果为 ih , dlrow olleh
// 对容器
vector<int> v = {5,4,3,2,1};
reverse(v.begin(),v.end());//容器v的值变为1,2,3,4,5
参考文章:C++ reverse函数的用法
全排列
// 首先对数列排序(从小到大)
sort(a, a + n);
注意
- 最后一个输出后面不能有空格
if(count < n){ //如果输出的个数小于n,则输出空格
printf(" ");
}
- 以变量作为数组下标,查找元素更加方便,例如:B1041.考试座位号
排序
假如有一个结构体
struct Student{
char name[10];
int score;
}stu;
main函数中,需要加入一个比较函数 cmp():
sort(stu, stu+n, cmp); // stu:需要排序的数组 n:需要排序的数组的大小
整型从大到小排序
实现从大到小的排序
bool cmp(Student a, Student b)
{
return a.score > b.score; //从大到小排序
}
字符串按字典序从小到大排序
bool cmp(Student a, Student b)
{
int s = strcmp(a.name, b.name);
if(s != 0) return s < 0; // 从小到大
// 如果要从大到小,则 return s > 0;
}