大整数的排序输出

来源:互联网 发布:java消息队列 编辑:程序博客网 时间:2024/06/16 09:40

宇宙总统洛谷P1781

描述:地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。

输入输出格式

输入格式:president.in

第一行为一个整数n,代表竞选总统的人数。

接下来有n行,分别为第一个候选人到第n个候选人的票数。

输出格式:president.out

共两行,第一行是一个整数m,为当上总统的人的号数。

第二行是当上总统的人的选票。

要点1、
       这道题由于票数巨大,可以用字符串保存,即大整数用字符串来表示。比较过程如下:一个个比,比一个丢一个,设置一个变量记当前大票的候选人号。
(1)比较位数,位数大的得票高,即首先找出位数最多的那几个数;
(2)位数相同,从最高位开始比较,大的为得票高,即在位数相同的几个数中,先找到最高位大的那几个;
(3)在数相同,最高位相同的情况下,比较次高位,如此循环到底。

要点2、
      可构造一个结构体来解决这件事,{票数tk,票数位数len,竞选人编号i},语法如下:

struct Elect{ char tk[105];//结构体a[i]的成员tk表票数,这里用字符串存入;
int len,num;//结构体a[i]的成员len表票数的数字位数;结构体a[i]的成员num:竞选人编号
}a[maxn];//定义结构体a[i],maxn可以在头部定义,方便修改。

要点3、
然后c++中自带sort函数,调#include <algorithm>,语法描述为:
sort(begin,end),表示一个范围,
例子:
#include <algorithm>
int main(){ int a[20]={2,4,1,23,5,76,0,43,24,65},i; for(i=0;i<20;i++)  cout<<a[i]<<endl; sort(a,a+20); for(i=0;i<20;i++) cout<<a[i]<<endl; return 0;}输出结果将是把数组a按升序排序。
还有一种方法是自己编写一个比较函数来实现,即接着调用三个参数的sort,语法是sort(begin,end,compare)就成了。
自己编写compare函数:bool compare(int a,int b){  return a<b; //升序排列,如果改为return a>b,则为降序}#include <algorithm>int main(){  int a[20]={2,4,1,23,5,76,0,43,24,65},i;  for(i=0;i<20;i++)  cout<<a[i]<<endl;  sort(a,a+20,compare);  for(i=0;i<20;i++)  cout<<a[i]<<endl;  return 0;}
这里我们用降序,这样结构体a(1)中存的就是最大的得票了和位置数了。
完整程序如下:
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int n;//竞选人数 struct Elect{    char tk[105];//tk:票数,这里用字符串存入     int len,num;//len:票数的数字位数;num:竞选人编号 }a[25];//这里用一下结构体, bool cmp(Elect x,Elect y)//比较函数是重点 {    if(x.len>y.len)        return 1; 降序    if(x.len<y.len)        return 0;//先比数位多少     if(strcmp(x.tk,y.tk)>0)        return 1;//如果数为相同的话还要比较数字大小     return 0; } int main(){    cin>>n;读候选总统人数;    for(int i=1;i<=n;i++)    {        cin>>a[i].tk;//一个个读入总统的票数         a[i].len=strlen(a[i].tk);//计算票数的长度        a[i].num=i;//记录总统的位置数。     }    sort(a+1,a+n+1,cmp);//进行排序,sort函数需调用algorithm库     cout<<a[1].num<<endl;//因为是降序所以结构体第一个就是最高得票总统    cout<<a[1].tk<<endl;//puts(a[1].tk);//进行输出 
    return 0;}
原创粉丝点击