现在大概知道随笔应该写点什么,废话扯得不是那么多了哈哈哈(ps.我就是不知道怎么开头)。
恩,今天嘛,一大早看见大批人马准备去军训,我也好激动啊……上午也没干什么,就刷题吧,觉得今天上午效率特别低,主要是首先做的x个2011相乘后y位数是什么,当时做这个题还有思路,想的就是先把x个2011相乘的值给求出来,其实当时我也知道会超出long long的范围,但觉得只有这一种方法,就硬碰硬吧(所以以后如果值超出范围了就要换方法,中间的值也不能超范围)。这道题目中午学长给我讲了挺长时间,他主要给我说了一个公式:(a*b)%m=(a%m)*(b%m)%m,这样的话x个2011相乘后的y位数就可以转换为x个2011依次对10的y次方(这个得用循环算出来)进行模运算,最后再取模。
附(上面公式的证明):a=c*m+d b=e*m+f
0<=d<m 0<=f<m
a%m=d b%m=f
右边=(a%m)*(b%m)%m=(d*f)%m
左边=(a*b)%m=[(c*m+d)*(e*m+f)]%m=[c*e*m*m+(d*e+c*f)*m+d*f]%m(乘法分配律)=(d*f)%m
今天下午又讲了函数,感觉不是很难,不过还没有开始做题。但“变参,别名”里有一道题当时听的有点懵:P1013 交换两个变量的值,刚又看了看,好像是明白了,它说的就是把a、b两个数的值分别赋给
x和y,然后把x和y交换了位置,但它们的值没有变,所以输出a与b的值依然不变……然后在类型后加了“&”,也就是把单向传递改为双向,额,好像是这样吧……
讲完函数后又做了题,这道题我记不太清了,大概就是输入7对数,看他们相加哪个值最大,就输出对应的那个组数,但如果最大的数有两个或以上,就输出靠前的那一组,当时不太会输出靠前的那一组,程序如下,只需再加7个break;就行了。
#include<iostream> #include<cmath> #include<iomanip> using namespace std; int main() { int A,a,B,b,C,c,D,d,E,e,F,f,G,g; cin>>A>>a; cin>>B>>b; cin>>C>>c; cin>>D>>d; cin>>E>>e; cin>>F>>f; cin>>G>>g; int m,n,x,y,p,q,k; m=A+a;n=B+b;x=C+c;y=D+d;p=E+e;q=F+f;k=G+g; if(m<=8&&n<=8&&x<=8&&y<=8&&p<=8&&q<=8&&k<=8) cout<<0<<endl; {for(int i=20;i>8;i--) {if(i==m) if(cout<<1<<endl) break; if(i==n) if(cout<<2<<endl) break; if(i==x) if(cout<<3<<endl) break; if(i==y) if(cout<<4<<endl) break; if(i==p) if(cout<<5<<endl) break; if(i==q) if(cout<<6<<endl) break; if(i==k) if(cout<<7<<endl) break;}} //cout<<setiosflags(ios::fixed)<<setprecision(1); return 0; }
哦对,还有循环里的变量,例如天数月数,需要设初始量的!
今天整体感觉还不错,明天继续加油↖(^ω^)↗