c++问题程序填空,产生指定输出结果

程序填空,产生指定输出结果

#include 

#include 

#include 

using namespace std;

struct Point{

int x;

int y;

};

// 在此处补充你的代码

int main()

{

int a[8] = {6,5,55,23,3,9,87,10 };

sort(a,a+8,Rule1);

for(int i = 0;i < 8; ++i)

cout << a[i] << "," ; 

cout << endl;

Point ps[8] = {{1,0},{0,1},{0,-1},{-1,0},{1,-1},{1,1},{2,0},{-2,0} } ;

sort(ps,ps+8,Rule2);

for(int i = 0;i < 8; ++i)

cout << "(" << ps[i].x << "," << ps[i].y << ")"; 

return 0;

}

输入

输出

10,23,3,55,5,6,87,9,

(-1,0)(0,-1)(0,1)(1,0)(1,-1)(1,1)(-2,0)(2,0)

整数按照个位数从小到大排。个位数相同,则大的排前面 

点按照离原点从近到远排。距离相同,则按x坐标从小到大排。x坐标也相同,则按y坐标从小到大排

#include<iostream>            //输入输出流需要用到
#include<algorithm>           //sort函数需要用到
#include<cmath>                //求m的n次方需要用到
using namespace std;

struct Point{
    int x;
    int y;
};

bool Rule1(int a, int b){
    int s1 = a%10;
    int s2 = b%10;               //记录a和b的个位数值
    if(s1 == s2)                    //如果个位数相同
        return a > b;               //按a和b的值大到小排列
    return s1 < s2;               //按个位数小到大排列
}

bool Rule2(Point a, Point b){
    double s1 = pow(a.x,2) + pow(a.y,2);
    double s2 = pow(b.x,2) + pow(b.y,2);    //求坐标点的距离值的平方
    if(s1 < s2)                                              //先比较平方和
        return s1 < s2;                                   //按平方和小到大排列
    else if(s1 == s2)                                     //如果距离值相同
        if(a.x != b.x)                                        //且a的x不等于b的x
            return a.x < b.x;                               //按a和b的x小到大排列
        else
            return a.y < b.y;                               //按a和b的y小到大排列
}

int main(){
    int a[8] = {6,5,55,23,3,9,87,10};
    sort(a, a+8, Rule1);
    for(int i = 0; i < 8; i++)
        cout << a[i] << "," ; 
    cout << endl;
    Point ps[8] = {{1,0},{0,1},{0,-1},{-1,0},{1,-1},{1,1},{2,0},{-2,0} } ;
    sort(ps, ps+8, Rule2);
    for(int i = 0; i < 8; ++i)
        cout << "(" << ps[i].x << "," << ps[i].y << ")"; 
    return 0;
}

题主觉得无语的话能点个采纳吗?呜呜呜