问题标题: 酷町堂:2450 考试成绩排名2

0
0
已解决
谭凯钊
谭凯钊
资深守护
资深守护
为什么90分:
#include<iostream>
using namespace std;
int main()
{
    long a[52],m,n;
    cin>>m;
    for(int i=1;i<=m;i++)
    cin>>a[i];
    for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[j]>a[i])
            {
            n=a[i];
            a[i]=a[j];
            a[j]=n; 
            }
        }
    }
    for(int i=1;i<=m;i++)
    cout<<a[i]<<" ";
    return 0;
 } 

0
已采纳
蒋智航
蒋智航
高级天翼
高级天翼
哈罗

谭凯钊你好,你这一题啊啊啊啊啊,用的是🔟选排,对吧❓

选排中啊,j要从i+1开始哒,你,却从1开始,呃呃呃呃……

蒋智航在2018-08-29 15:25:58追加了内容
如果你会用系统函数——sort()

你就加个

头文件!!!

输入输出你就自己写,若不会我给你输入代码

int m,a[100000];
 cin>>m;
 for (int i=0;i<m;i++)
 {
  cin>>a[i];
 }

 

sort(a,a+m,less<int>());

循环输出;

那么你就

AC啦!!!

蒋智航在2018-08-29 15:32:35追加了内容

蒋智航在2018-08-29 15:37:51追加了内容

0
0
郑怡翔
郑怡翔
初级天翼
初级天翼

原因出在这:

for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=m;j++)//错啦!!!
        {
            if(a[j]>a[i])
            {
            n=a[i];
            a[i]=a[j];
            a[j]=n; 
            }
        }
    }

这一行为什么错了,请看下一行:

因为选择排序的j应该是每次比i大1,所以应该是for(int j=i+1;j<=m;j++)

 

其他如果还有什么问题评论里说

0
时梓繁
时梓繁
修练者
修练者
   {
                int t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
0
尹宗鑫
尹宗鑫
新手守护
新手守护

选排,快排,插排……太麻烦了,直接sort(a+1;a+n+1);

我要回答