欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-01 19:35:22
...

海贼的奖品赞助

水题。。。。。。

#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++中自带的排序方法,对初学者可谓是非常方便,有了它,我们就不再需要费事地去写冒泡排序或者选择排序了
2020年1月21日 OJ习题(sort排序(自己的理解)) 随记

具体结构:

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

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)。
以下为实际代码证明:
2020年1月21日 OJ习题(sort排序(自己的理解)) 随记
2020年1月21日 OJ习题(sort排序(自己的理解)) 随记
正常排序。
2020年1月21日 OJ习题(sort排序(自己的理解)) 随记
2020年1月21日 OJ习题(sort排序(自己的理解)) 随记

修改了起始位置,结果如图,从a【2】开始排序了。
2020年1月21日 OJ习题(sort排序(自己的理解)) 随记
2020年1月21日 OJ习题(sort排序(自己的理解)) 随记
从a【1】开始排序5个数。
2020年1月21日 OJ习题(sort排序(自己的理解)) 随记
2020年1月21日 OJ习题(sort排序(自己的理解)) 随记
如图,最后一个数没有排序,这也就印证了以上结论!!!

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

上一篇:

下一篇: