好多细节知识已经忘了,需要写出来汇总一下了:
1.输出两位小数
#include<iostream> #include<iomanip> //setprecision() using namespace std; int main() { float a=1.66666; printf("%.2f\n", a); cout<<setprecision(3)<<a<<endl; system("pause"); return 0; }
2.四舍五入法
#include<iostream> #include<iomanip> using namespace std; int main() { double a=1.121111156789; a = (int)(a * 100 +0.5)/100.0; //先类型转换再执行除法 cout<<a<<endl; system("pause"); return 0; }
3.int型数组排序
#include<iostream> using namespace std; int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; } int main() { int a[10]; int i; for(i=0;i<10;i++) { cin>>a[i]; } qsort(a, 10, sizeof(a[0]), cmp); for(i=0;i<10;i++) { cout<<a[i]<<" "; } cout<<endl; system("pause"); return 0; }
4.结构体一级排序
#include<iostream> #include<iomanip> using namespace std; struct dist{ int x; double dist; }s[10]; int cmp(const void *a, const void *b) { return(*(dist *)a).dist > (*(dist *)b).dist ? 1 : -1; } int main() { int i; for(i=0;i<10;i++) { cin>>s[i].x>>s[i].dist; } qsort(s, 10, sizeof(s[0]), cmp); for(i=0;i<10;i++) { cout<<s[i].dist<<" "; } cout<<endl; system("pause"); return 0; }
5.辗转相除法求最大公约数
int gcd(int a, int b) { if(a%b== 0) return b; else return gcd(b, a%b); }
6.筛法求素数(未优化)
#include<iostream> #include<cmath> using namespace std; int N=1000001; bool* prime=new bool[N]; int main() { int i, j; for(i=2;i<N;i++) { prime[i]=true; } for(i=2;i<=N;i++) { for(j=2;i*j<=N;j++) { prime[i*j]=false; } } for(i=2;i<100;i++) { if(prime[i]) cout<<i<<endl; } system("pause"); return 0; }
7.并查集
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int father[50002]; int find(int x) { if(father[x] != x) father[x] = find(father[x]); return father[x]; } int main() { int a, b, m, n, p; cin>>n>>m>>p; for(int i=1;i<=n;i++) father[i] = i; for(int i=1;i<=m;i++) { scanf("%d%d",&a,&b); a=find(a); b=find(b); father[a]=b; } for(int i=1;i<=p;i++) { scanf("%d%d",&a,&b); a=find(a); b=find(b); if(a==b) printf("Yes"); else printf("No"); } system("pause"); return 0; }