多组输入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

京公网安备 11010502036488号