PAT 乙级1082 射击比赛 (20 分)C++_c++

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int ID[n];  //先用int存储,之后在输出时补0
    int x[n],y[n];  //x 和 y 是其打出的弹洞的平面坐标(x,y)
    for(int i=0;i<n;i++)
    {
        cin>>ID[i]>>x[i]>>y[i];
    }
    int d[n];   //靶心的距离的平方
    for(int i=0;i<n;i++)
    {
        d[i]=x[i]*x[i]+y[i]*y[i];
    }

    for(int i=0;i<n;i++)    //冒泡排序
    {
        for(int j=i;j<n;j++)
        {
            if(d[i]<d[j]){
                swap(d[i],d[j]);    //交换
                swap(ID[i],ID[j]);  //交换
            }
        }
    }
    printf("%04d %04d",ID[n-1],ID[0]);
    //%04d 表示:在输出整数x的时候 按照4个位子的空间左对齐 多余的位子用0代替
    //cout<<ID[n-1]<<" "<<ID[0]<<endl;

    return 0;
}

______________________________________________________________________________________________________对冒泡排序进行优化

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int ID[n];  //先用int存储,之后在输出时补0
    int x[n],y[n];  //x 和 y 是其打出的弹洞的平面坐标(x,y)
    for(int i=0;i<n;i++)
    {
        cin>>ID[i]>>x[i]>>y[i];
    }
    int d[n];   //靶心的距离的平方
    for(int i=0;i<n;i++)
    {
        d[i]=x[i]*x[i]+y[i]*y[i];
    }

    int flag=1; //冒泡排序优化
    for(int i=0; i<n&&flag; i++)
    {

        flag=0;
        for(int j=0; j<n-i-1; j++)
        {
            if(d[j+1]>d[j])
            {
                swap(d[j+1],d[j]);
                swap(ID[j+1],ID[j]);
                flag=1;
            }
        }
    }
    printf("%04d %04d",ID[n-1],ID[0]);
    //%04d 表示:在输出整数x的时候 按照4个位子的空间左对齐 多余的位子用0代替
    //cout<<ID[n-1]<<" "<<ID[0]<<endl;

    return 0;
}