多组输入EOF
截止到0就用&&n
截止到0/-1就用 if《<=0 break;
第四种也就是第四种,什么都不说,只管输入,甚至没告诉怎么结束的。(多见于字符串处理) 在数字中是未知的数量就用while(cin>>n)但是不是0


#include<iostream>
#include<math.h>
using namespace std;
int main(){s

    int n;
    cin>>n;
    double q;
    q=sqrt(n);
//    cout.precision(1);//这个加上就是会四舍五入 1指的是小数点之前+之后的一共只有一个
    //所以int 不会四舍五入 double也不会 但是这个precision 会自动的四舍五入小数点后n-1位数 
    printf("%.0f",q);


    return 0;
}

printf("%.0f",q);== cout.precision(1);

学习了
归并排序
并查集
快速排序
二分查找
在堆中定义了一个数组
void fz() {
for (int i = 0; i < MAX; i++) {
shuzu[i] = i;
}
}
然后在主函数中跑一下就行了

#include<bits/stdc++.h>
using namespace std;
//我选择路径压缩法+合并+查找 (附上不用路径压缩的) 
int f[200000];
int n,m;
int z,x,y;
//构造压缩法1.找祖宗函数
 int parent(int x) {//不停找爹,直到找到祖宗为止 
        if (f[x]==x) return x;
        else return f[x]=parent(f[x]);//这里是路径压缩,把递归过程中遇到的

} 
/*//同上可以用三目运算快速表示
int parent(int o) {//不停找爹,直到找到祖宗为止 
         return f[o]==o?o:f[o]=parent(f[o]);//这里是路径压缩,把递归过程中遇到的
                                   //结点的祖宗结点也直接修改了。
   }*/

//构造merge函数 开始打架
int merge(int x,int y){
        int x_root=parent(x);
        int y_root=parent(y);
        if(x_root!=y_root){
                f[x_root]=y_root;  //这里就把y向x的祖宗靠近 
                return 1;        
        }
        else
        return 0;        
} 
void find(int x,int y) {
              int x_root=parent(x);
                int y_root=parent(y);
        if (x_root==y_root) printf("Y\n");
        else printf("N\n");
    }



int main(){        
        cin>>n>>m;
        //是n个不同的,在主函数里面写initialise给每个点指向他们自身 
        //是m组数据         
//下面的for相当于上面的fz函数
        for(int i=1;i<=n;i++){
                f[i]=i;        
        }
        for(int i=1;i<=m;i++){
                cin>>z>>x>>y;
                if(z==1)//合并操作=打架! 
                merge(x,y);
                else//执行的是find找祖宗的 
                find(x,y);
        }

}

I题目 大数取余变形
https://vjudge.net/contest/362412#problem/I

#include<iostream>
using namespace std;

int T,N,M;
 //大数取余是取余数的意思 大叔对于小数的玉树     ans=((ans*10)+BigNum[i])%c; 这个前面*10之后机上每位的数字 
 //本题是给出 两个数a,b  并且n个b结合可以是 所以那个每个位的数字都一样了,然后求一共有几位 
long long fun(){
    long long r = 0,tim = 0;
    while(true){
        r = (r*10 + M) % N;
        tim++;
        printf("r=%d\n",r);
        if(r == 0) break;
    }
   // printf("%d",r);
    return tim;
}
int main(){
    cin>>T;
    int kase = 0;
    while(T--){
        scanf("%d %d",&N,&M);
       long long res = fun();
        printf("Case %d: %lld\n",++kase,res);
    }

    return 0;
}

大数取余 原版
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int big(int BigNum[],int c,int length)
{
int ans=0;
for(int i=0;i< length;i++)
ans=((ans*10)+BigNum[i])%c;
return ans;
}
int main()
{
char s[1001];
int a[1001],b,leng;
while(scanf("%s %d",s,&b)!=EOF)
{
leng=strlen(s);
for(int i=0;i<leng;i++)
{
a[i]=s[i]-'0';
}
printf("%d\n",big(a,b,leng));//a%b
}
return 0;
}

i=2 i<=n 是n-1次数 i=1i<=n是n次 i=0,i<n是 n次数
二分法

位运算左移X2 右翼/2