算法笔记实训笔记

23/8/16
冒号表达式 ()?x:y
可以三个条件 以此类推 ()?x:()?y:z
判断三角形最简单的办法
bool canFormTriangle(int a, int b, int c) {return (a + b > c) && (b + c > a) && (a + c > b);}
带空格的数据输入
(cin,);
cin.(char[],num);
变成int
stoi() which meansto int
int 变成
()
注意里面每一项如果想用数字要用str[num]-'0'
大数据的幂运算 可以用循环
#include using namespace std;int main() {int n;cin >> n;int result = 1;for (int i = 0; i < n; ++i) {result = (result * 2) % 1007;}cout << result << endl;return 0;}
模运算展开式推导
我们要证明等式:
(a * b) mod m = ((a mod m) * (b mod m)) mod m
假设a = q1 * m + r1,其中q1是a除以m的商,r1是a除以m的余数 。类似地,假设b = q2 * m + r2,其中q2是b除以m的商,r2是b除以m的余数 。
将a * b展开得:
a * b = (q1 * m + r1) * (q2 * m + r2)
展开后,我们得到:
a * b = q1 * q2 * m^2 + q1 * m * r2 + q2 * m * r1 + r1 * r2
接下来,我们可以看到a * b对m取模后的结果:
(a * b) mod m = (q1 * m * r2 + q2 * m * r1 + r1 * r2) mod m
现在,我们注意到q1 * m * r2和q2 * m * r1都是m的倍数,因此对m取模后会变为0 。另外,r1 * r2对m取模后结果仍然是r1 * r2 。因此,我们可以简化为:
(a * b) mod m = r1 * r2 mod m
另一方面,我们可以计算(a mod m) * (b mod m):
(a mod m) * (b mod m) = (r1 * r2) mod m
最终,我们得到:
(a * b) mod m = ((a mod m) * (b mod m)) mod m
这证明了所要证的等式
23/8/17
(start,) //
s="abc";
m=s.(0,3) //从0开始复制长度为3的一段
结果: m=abc;
多维数组初始化
(清空)
(数组名,要初始化成的值(二进制)例如0,-1;如果5,则会变成101,要初始化多长字节)
int 4字节 10个int应有
(a,-1, a) 不需要加括号;
比循环更快;
数组复制
int a[10] , b[10]
(目标数组,原数组,复制多长字节)
(b,a, a)//把a复制给b
x区域划分数学
用两步走 i+j和i-j来思考
函数提供了多种格式化选项,用于控制输出的格式 。以下是一些常用的格式化选项:
整数格式化:
浮点数格式化:
字符和字符串格式化:
指针格式化:
宽度和精度:
对齐和填充:
其他:
日期处理问题,通用思路
写一个判断闰年函数,(这个判断闰年函数与增加一天日期变化函数有联系,1闰0不闰)

算法笔记实训笔记

文章插图
bool isLeapYear(int year){return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);}
写一个平闰年对应月份的天数二维数组
int dayOfMonth[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
写一个增加一天日期变化函数
void addOneDay(int &year, int &month, int &day) {day++;if (day > dayOfMonth[isLeapYear(year)][month]) {month++;day = 1;}if (month > 12) {year++;month = 1;}}
回忆复习Qt基础知识;
构思并完善项目的模块内容:1、注册和登陆界面2、与服务器连接保存注册信息,验证登陆信息3、登陆成功后跳转客户端界面4、客制化个人信息例如姓名头像和添加好友功能5、初始化ip和端口并接入服务器6、聊天功能、私聊群聊7、传输简单文本文件;