2017.7.30 第5天 时间已过半

  现在大概知道随笔应该写点什么,废话扯得不是那么多了哈哈哈(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;
}

    哦对,还有循环里的变量,例如天数月数,需要设初始量的!

  今天整体感觉还不错,明天继续加油↖(^ω^)↗

原文地址:https://www.cnblogs.com/jzyz-lfy/p/7260627.html