2020年1月21日 OJ习题(sort排序(自己的理解)) 随记

海贼的奖品赞助

水题。。。。。。

#include <bits/stdc++.h>
using namespace std;
double x[30];
int main()
{
    int n,a=0;
    double b;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>x[i];
        if(x[i]>=20.00) a++;
    }
    b=(a*1.0)/n;
    printf("%.2lf\n",b);
    //cout << "Hello world!" << endl;
    return 0;
}

大数的乘法

可利用栈存数,一个字符类型的栈用来存初始的字符串,计算后的结果为整型,因此还需要一个整型的栈存储结果,最后出栈输出结果即可,但是进位的地方需要注意书写顺序,详细看代码

#include <bits/stdc++.h>
using namespace std;
stack<char> x1;//存字符串//
stack<int> x2;//存计算后的整型数//
int main()
{
   char str[100],ch;//ch用来取出栈的每一个字符串//
   int a,l,b,y,m=0,n=0;//a是1位数,l求字符串长度,b接受(-‘0’)变换后的数,y接受计算结果,m,n分别接受y对10求商和取模的结果//
   while(cin>>str>>a)
   {
    if(a==0)
    cout<<"0"<<endl;
   else
   {
      l=strlen(str);
   for(int i=0;i<l;i++)
   {
       x1.push(str[i]);
   }
   while(!x1.empty())
   {
       ch=x1.top();
       x1.pop();
       b=ch-'0';
       y=a*b;
       m=y%10;
       if((m+n)>9)//需要进位//
       {
           x2.push((m+n)%10);
           n=(m+n)/10+y/10;//n由两部分组成,当下的y对10求商的结果以及进位情况下的进位值//
       }
       else
       {
           x2.push(m+n);
           n=y/10;
       }
   }
   while(!x2.empty())
   {
       printf("%d",x2.top());
       x2.pop();
   }
   cout<<endl;
   }
   }
    return 0;
}

ICPC 团队

题目已经简化了,根据题意,只需找出两个最大的数,它们的和就是结果

#include <bits/stdc++.h>
using namespace std;

bool cmp(int a,int b)
{
    if(a!=b)
    {
        return a<b;
    }
}
int main()
{
    long long a[5],b;
    int t=1;
    while(scanf("%lld%lld%lld%lld",&a[1],&a[2],&a[3],&a[4])!=EOF)
    {
        sort(a+1,a+1+5,cmp);
        b=a[4]+a[3];
        //for(int i=1;i<5;i++)
            //cout<<a[i]<<" ";
        printf("Case %d: ",t++);
        printf("%lld\n",b);
    }
    return 0;
}

以下写一下自己对sort排序的理解,如理解有误,恳请指正

sort排序是c++中自带的排序方法,对初学者可谓是非常方便,有了它,我们就不再需要费事地去写冒泡排序或者选择排序了

具体结构:

在这里插入图片描述

sort排序实际上就是对某一给定的区间内的数进行排序,这里起始地址不需多说,可以理解为开始排序的位置,对于数组的结束地址,需要说明的是,它不是要排序的最后一个数,就上面的例子而言,数组由五个数,因此应该是a【0】,a【1】,a【2】,a【3】,a【4】这五个,我们知道a与a【0】是等价的,因此这里的a+5自然就变成了a【5】,这一位其实是没有数的,这也是为什么会有这种写法:sort(a+1,a+1+n),这样写的意思其实是要为n个数进行排序,但是起始位置是a【1】,然而要排序的第n个数应该是a【n】,结束地址确实a+1+n;
综上,不难理解,这个区间实际上可以理解为一个左闭右开区间。。。。。。
即【a,a+n)。
以下为实际代码证明:
在这里插入图片描述
在这里插入图片描述
正常排序。
在这里插入图片描述
在这里插入图片描述

修改了起始位置,结果如图,从a【2】开始排序了。
在这里插入图片描述
在这里插入图片描述
从a【1】开始排序5个数。
在这里插入图片描述
在这里插入图片描述
如图,最后一个数没有排序,这也就印证了以上结论!!!

以上想法单纯为自己记忆方便,如有错误,无需当真,同是恳请指正!!!!!!

发布了10 篇原创文章 · 获赞 1 · 访问量 139

猜你喜欢

转载自blog.csdn.net/shiroi2333/article/details/104064310