1. 精度问题
浮点数的存储并不是精确的,因此在判断两个通过不同算法得到的浮点数是否相等或者大小的时候
定义精度eps
2.数组旋转问题
利用algorithm库里的reverse函数
该方法只用一次循环,时间复杂度比起两层循环,每次后移一位的方法要更高效。
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,k;
cin >> n >> k;
int A[100]={0};
for (int i = 0; i < n; i++){
cin >> A[i];
}
reverse(A,A+n);
reverse(A,A+k);
reverse(A+k,A+n);
for (int i = 0;i<n;i++){
cout << A[i] << " ";
}
return 0;
}
3.回型矩阵-语法基础课 753题等
关键在于点(i,j)到上下左右边距离的最小值
4.平方矩阵II 754题
a.算法1 一行一列的写 从对角线向右延伸 向下延伸
#include<iostream>
using namespace std;
int main(){
int n;
int A[101][101];
while(cin >> n && n){
for(int i = 0; i < n; i++){
for(int j = i, k =1; j <=n;j ++, k++){
A[i][j] = k;
A[j][i] = k;
}
}
for(int i = 0; i < n; i ++){
for (int j = 0; j<n; j++){
cout << A[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
return 0;
}
b.算法2 一行一行写 对角线左边 从大到小 对角线右边 从小到大
将一行分为2部分, 前面是递减到1, 后面是递增
#include<iostream>
using namespace std;
int main(){
int n;
while(cin >> n && n){
for (int i = 1 ; i <=n; i ++){
for (int j = i; j >=1; j --) cout << j << ' ';
for (int j = i+1; j <=n; j++) cout << j-i+1 << ' ';
cout << endl;
}
cout << endl;
}
}
c 算法3 找规律 aij = |i-j|+1
#include<iostream>
using namespace std;
int main(){
int n;
int A[101][101];
while(cin >> n && n){
for(int i = 1; i <= n; i++){
for(int j = 1; j <=n;j ++){
cout << abs(i-j)+1 << " ";
}
cout << endl;
}
cout << endl;
}
return 0;
}
part 2 字符串
1.关于读字符串
最简单的cin
和scanf
读字符串,遇到空格就会停止。
因此,当输入有空格时 用 cin.getline()
getline()
fgets
其中,当用string定义字符串时,只能用getline
cin.getline
2.string类型不能用scanf
来读,但可以用printf
输出
part 3 结构体,指针部分
#include <iostream>
using namespace std;
struct Node
{
int val;
Node* next;
Node(int _val) : val(_val), next(NULL) {}
};
int main()
{
Node* p = new Node(3);//new调用构造函数 并返回地址
cout << p->val << endl;//如果构造的是地址 用-> 调用
Node a = Node(2); //注意如果构造的是变量 用 . 调用 并且不能 使用new new返回的是地址而不是结构体
cout << a.val << endl;
auto* q = new Node(1); //自动判断类型
p->next = q;
cout << (p->next)->val << endl;
return 0;
}
<注> 链表中 head头节点存放的是第一个节点的地址,而不存放值
单链表的遍历
#include <iostream>
using namespace std;
struct Node
{
int val;
Node* next;
Node(int _val)
{
val = _val;
next = NULL;
}
};
int main()
{
Node* p = new Node(1);
Node* q = new Node(2);
Node* o = new Node(3);
p->next = q;
q->next = o;
Node* head = p;
for(Node* i = head; i; i=i->next)
cout << i->val << endl;
return 0;
}