大整数的排序输出
来源:互联网 发布: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;}
阅读全文
0 0
- 大整数的排序输出
- 牛客---大整数的排序
- 大数据量整数排序
- 大数据量整数排序
- 大整数排序
- 大整数排序
- 大整数排序
- 大整数排序
- 大整数排序
- 大整数排序
- 大整数排序
- 大整数相乘------输出两个不超过100位的大整数的乘积
- 题目64:大整数排序
- 题目1190:大整数排序
- 题目1190:大整数排序
- 题目1190:大整数排序
- 题目1190:大整数排序
- 题目1190:大整数排序
- 学python(03)—— 如何使用函数实现一个随机字符串里的大小写字符互换
- Servlet 返回浏览器一个表格
- 2017/12/11 日志记录
- myeclipse彻底修改项目名称
- Vue项目运行配置
- 大整数的排序输出
- Javascript中普通函数和构造函数的区别
- 自己总结的部分SystemVerilog可综合的常数函数的编写规则
- 第四周项目3单链表应用
- win10+qt+vs2013+opencv人脸检测详细步骤
- python基础学习(2)—分支语句
- java 基础
- JavaScript中var、let、const区别。
- FZU 2278 YYS