续上篇····
还是其实果然是差不多的?
题目描述:首先输入一个数n 代表接下来需要对n个数字按照绝对值从大到小进行排序 紧接着输入n个整数 包括整数和负数
题目分析: 没什么需要注意的 题目虽然是按照绝对值排序 但是要求输出的是原值 所以我用结构体处理的 只要对绝对值进行排序 然后输出原值就可以了 w
题目分析: 没什么需要注意的 题目虽然是按照绝对值排序 但是要求输出的是原值 所以我用结构体处理的 只要对绝对值进行排序 然后输出原值就可以了 w
还是说果然机智的我是正确的 (*/ω\*)
sort做法
sort
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <string.h>
using namespace std;
typedef struct Node{
int num;
int aft;
};
Node node[10000];
bool cmp(Node a,Node b)
{
return a.aft>b.aft;
}
int main(){
int n;
while (scanf("%d",&n)!=EOF && n!=0)
{
int i;
for (i=0;i<n;i++)
{
scanf("%d",&node[i].num);
if (node[i].num<0) //输入的是负数
{
node[i].aft=abs(node[i].num);
}
else
{
//输入的是正数
node[i].aft=node[i].num;
}
}
sort(node,node+n,cmp);
for(i=0;i<n;i++)
{
printf("%d",node[i].num);
if(i==n-1)
printf("\n");
else
printf(" ");
}
}
return 0;}
优先队列做法
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <math.h>
using namespace std;
struct Node{
int num;
int aft;
Node (int a=0,int b=0):
num(a),aft(b){}
};
bool operator<(Node a,Node b){
return a.aft<b.aft;
}
int main(){
int n;
while (scanf("%d",&n)!=EOF && n!=0)
{
priority_queue <Node> que;
int i;
int data;
for (i=0;i<n;i++)
{
scanf("%d",&data);
que.push(Node(data,abs(data)));
}
while (!que.empty())
{
printf("%d",que.top().num);
que.pop();
if(que.size()!=0)
printf(" ");
else
printf("\n");
}
}
return 0;}
#include <iostream>
#include <algorithm>
#include <queue>
#include <math.h>
using namespace std;
struct Node{
int num;
int aft;
Node (int a=0,int b=0):
num(a),aft(b){}
};
bool operator<(Node a,Node b){
return a.aft<b.aft;
}
int main(){
int n;
while (scanf("%d",&n)!=EOF && n!=0)
{
priority_queue <Node> que;
int i;
int data;
for (i=0;i<n;i++)
{
scanf("%d",&data);
que.push(Node(data,abs(data)));
}
while (!que.empty())
{
printf("%d",que.top().num);
que.pop();
if(que.size()!=0)
printf(" ");
else
printf("\n");
}
}
return 0;}
赛高~~
不过我会继续验证的(猛点头
不过我会继续验证的(猛点头