1. /*======================================================================
  2. [NOIp 1998 提高组]Probelm 2 连接多位数
  3. 总时间限制: 10000ms 内存限制: 65536kB
  4. 描述
  5. 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
  6.  
  7. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
  8.  
  9. 又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
  10.  
  11. 输入
  12. 第一行:n
  13. 接下来的N行:n个数
  14. 输出
  15. 联接成的多位数
  16. 样例输入
  17. 3
  18. 13
  19. 312
  20. 343
  21. 样例输出
  22. 3433213
  23.  
  24. [问题分析]
  25. 举例说明正常的字符串比较缺陷!
  26. 如:A=’321’,B=’32’,按照标准的字符串比较规则因为A>B,
  27. 所以A+B > B+A ,而实际上’32132’< ’32321’。
  28. 所以,自定义一种字符串的比较规则:
  29. 即如果A+B>B+A,则我们认为A>B。且可以证明:如果A+B>=B+A,B+C>=C+B,则一定有:A+C>=C+A。(注意,这个地方的加号是字符串连接)
  30. 这样一来,程序就很简单了。
  31. 分3步,先把n个数字转换成字符串存储;
  32. 再按照自定义的规则把n个字符串排序;
  33. 最后按照从大到小的顺序输出这些字符串。
  34.  
  35. 小结:有些问题看起来是数学问题,认真分析会发现用字符串处理很简单。
  36. 另外,一定要掌握有关字符串的各种函数,以免用到时自己编子程序。
  37.  
  38. 注:这个题是2011百度实习生笔试题,上面的分析在百度文库“2011百度实习生笔试题”复制而来。
    http://wenku.baidu.com/link?url=HmZNHTkL7rm2vnC4XZKs6Ero0_78Bp5hMtvHMHdkaJrRn_GcyBZLivk2sydEL2oC7msYRQ5U6ZbY4a6M3PJhJ5zCEJEXNacXziF-uexIzpq
  39. ========================================================================*/
  1. #include<stdio.h>
  2. #include<string.h>
  3. int intToStr(int x,char a[]);//把十进制x转成字符串,存储在字符串a。返回0表示出错。返回1表示成功
  4. int cmp(int x,int y);//把x和y当字符串,自定义一种字符串的比较规则,即如果x+y>y+x,则我们认为x>y。
  5. int main()
  6. {
  7. int n,i,a[],j,k,t;
  8. freopen("9.in","r",stdin);
  9. scanf("%d",&n);
  10. for(i=;i<n;i++)
  11. {
  12. scanf("%d",&a[i]);
  13. }
  14. //下面按自定义的规则对那n个数排序。从大到小排序
  15. for(i=;i<n-;i++)
  16. {
  17. k=i;
  18. for(j=i+;j<n;j++) //寻找a[i+1]~a[n-1]当中最小的元素并把它的下标记录到k里面。
  19. if(cmp(a[j],a[k])>) //if(a[j]>a[k])
  20. k=j;
  21. if(i!=k)
  22. {
  23. t=a[k];
  24. a[k]=a[i];
  25. a[i]=t;
  26. }
  27. }
  28. //下面输出按自定义规则排序后的数字
  29. for(i=;i<n;i++)
  30. {
  31. printf("%d",a[i]);
  32. }
  33. printf("\n");
  34. return ;
  35. }
  36. int cmp(int x,int y)//把x和y当字符串,自定义一种字符串的比较规则,即如果x+y>y+x,则我们认为x>y。
  37. {
  38. char a[],b[];
  39. char ab[],ba[];
  40. intToStr(x,a);
  41. intToStr(y,b);
  42. strcpy(ab,a);
  43. strcat(ab,b);
  44. strcpy(ba,b);
  45. strcat(ba,a);
  46. return strcmp(ab,ba);
  47. }
  48. int intToStr(int x,char a[])//把十进制非负整数x转成字符串,存储在字符串a。
  49. {//返回0表示出错。返回1表示成功
  50. int i,len;
  51. char t;
  52. if(x<) return ;
  53. if(x==)
  54. {
  55. a[]='';
  56. a[]='\0';
  57. return ;
  58. }
  59. else
  60. {
  61. i=;
  62. while(x>)
  63. {
  64. a[i]=x%+'';
  65. x=x/;
  66. i++;
  67. }
  68. a[i]='\0';
  69. len=i;
  70. for(i=;i<len/;i++)
  71. {
  72. t=a[i];
  73. a[i]=a[len--i];
  74. a[len--i]=t;
  75. }
  76. return ;
  77. }
  78. }
  1. //上面这个整数转字符串的函数其实函数库有相应的库函数。
  2. /*
  3. itoa 注意:这个不是C的标准函数,不是所有的编译器都支持的。
  4. 功 能:把一整数转换为字符串
  5. 用 法:char *itoa(int value, char *string, int radix);
  6. 详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写.
  7. 参数:
  8. value: 待转化的整数。
  9. radix: 是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。
  10. * string: 保存转换后得到的字符串。
  11. 返回值:
  12. char * : 指向生成的字符串, 同*string。
  13. 备注:该函数的头文件是"stdlib.h"
  14. */
  15.  
  16. /*
  17. C语言库函数名: atoi
  18. 原型: int atoi(const char *nptr);
  19. 功 能: 把字符串转换成整型数.
  20. 名字来源:array to integer 的缩写.
  21. 函数说明: atoi()会扫描参数nptr字符串,如果第一个字符不是数字也不是正负号返回零,
  22. 否则开始做类型转换,之后检测到非数字或结束符 \0 时停止转换,返回整型数。
  23. */

[NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】的更多相关文章

  1. 最优贸易 NOIP 2009 提高组 第三题

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

  2. NOIP 2008提高组第三题题解by rLq

    啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...

  3. NOIP 2014 提高组 题解

    NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...

  4. NOIP 2001 提高组 题解

    NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...

  5. NOIP 2006 提高组 t1 能量项链

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  6. noip 2014 提高组初赛

    noip 2014 提高组初赛 一. TCP协议属于哪一层协议( ) A. 应用层 B. 传输层 C. 网络层 D. 数据链路层 B TCP(传输控制协议) 若有变量int a; float: x, ...

  7. NOIP 2017 提高组 day1t2 时间复杂度

    P3952 时间复杂度 标签 NOIp提高组 2017 时空限制 1000ms / 128MB 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂 ...

  8. NOIP 2015提高组复赛

    神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第 ...

  9. NOIP 2000 提高组 题解

    NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...

随机推荐

  1. Redis - 事物控制和发布订阅

    multi命令后续命令将进入队列,不会马上执行,当执行exec后,一次输出所有结果 事物回滚使用discard命令,放弃之前的输入执行. SUBSCRIBE/PUBLISH SUBSCRIBE KEY ...

  2. Android布局居中的几种做法

    Android的布局文件中,如果想让一个组件(布局或View)居中显示在另一个布局(组件)中,可以由这么几种做法: android:layout_gravity android:gravity and ...

  3. 第三周总结PSP日志文件

    项目计划 时间记录 缺陷记录 结对编程伙伴:李妍 20133099 博客地址:http://www.cnblogs.com/liyan-luckygirl/

  4. MySQL数据库性能优化的关键参数(转)

    我们在进行数据库管理和开发中经常会遇到性能问题,这就涉及到MySQL的性能优化.通过在网络上查找资料和笔者自己的尝试,我认为以下系统参数是比较关键的: 关键参数一:back_log 要求 MySQL ...

  5. js中this和回调方法循环-我们到底能走多远系列(35)

    我们到底能走多远系列(35) 扯淡: 13年最后一个月了,你们在13年初的计划实现了吗?还来得及吗? 请加油~ 主题: 最近一直在写js,遇到了几个问题,可能初入门的时候都会遇到吧,总结下. 例子: ...

  6. 廖雪峰老师的git在线教程

    我是看廖老师的网站,学习git使用的,所以在这里做做收藏,也推广推广. 该教程的类型可以换个名称<手把手看图教你用git>来概括,呵呵. 做得很用心,学起来很快.

  7. 硬盘缓存的最佳方案,DiskLruCache完全解析

    收藏自:http://blog.csdn.net/guolin_blog/article/details/28863651

  8. SAP系统联机应用程序帮助

    新安装好的SAP系统,联机帮助是不能用的. 通过菜单中的“帮助-应用程序帮助” 和“帮助-SAP库”都打不开任何帮助页面.这并不是因为SAPgui安装不完整,而是因为SAP的帮助系统本身就不包含在GU ...

  9. xmind的第三天笔记

  10. No 11.11 in my dictionary

    今年雙十一又被坑了.被京东坑大發了,正在努力維權中. 買了大大小小將近3wCNY的商品中唯有一件,我十分滿意 羅技的G105遊戲鍵盤,雖然我不是拿來玩遊戲的. 中國人在對比國內外產品時總有1萬個理由好 ...