zoukankan      html  css  js  c++  java
  • 【NOIP普及组】2016年模拟考试(9.3)——笨笨玩游戏

    一、笨笨玩游戏(game.cpp

    【题目描述】

    一天,笨笨和妈妈玩游戏,妈妈 给笨笨出N个正整数,让笨笨把这N个正整数连接生成一个的整数,每个正整数只使用一次,让笨笨告诉妈妈这样生成的大整数的最大值。

    例如,给出4个整数:123, 124, 56, 90,可以连接生成的大整数有:1231245690, 1241235690, 5612312490, 9012312456, 9056124123等等,对本例,总共可以生成24个大整数。而其实最大整数是:9056124123

    【输入】

    1行:个整数N1<=N<=50

    2行:N个整数,每个整数不超过INT_MAX

    【输出】

    1行:生成的最大整数。

    【样例输入】

    123 124 56 90 

    【样例输出】

    9056124123

    --------------------------------------------------------------------------------------------------------------------

    此题一看,很显然就是“贪心的排序”,很多人直接想到了strcmp,那多简单,对吧,但是直接strcmp错了!而我,不是用的strcmp,就……还是错了。

    首先先给找不到数据的小伙伴4个数据:

     输入                            输出
    2 9 98                           998
    2 98 9                           998
    2 3 34                           343
    2 34 3                           343

    其实直接strcmp比较“9”和“98”会得到“98”更大,事实上是“9”放前面。
    而我原来的方法是一位一位用for循环来比,和strcmp没有什么区别。

    那到底该咋办?没头绪……
    直到看到了社长大大的博客:2016普及组模拟考试 01题  ←点击链接 
    666666666666666666666666666666
    真的太6了

    正确方法:
    将待连接的两个数(或者说字符串)按照一前一后和一后一前连接起来存然后直接比较两个字符串就OK了,啊啊啊啊太巧妙了啊!

    我的代码(自然没有社长大大的短):

    #include<cstdio>
    #include<cstring>
    int n;
    char a[52][12],q[24],p[24],t[12];
    int main()
    {
    	freopen("game.in","r",stdin);
    	freopen("game.out","w",stdout);//文件输入输出,不要自己删
    	scanf("%d",&n);
    	for(int i=0;i<n;i++)
    		scanf("%s",a[i]);
    	for(int i=0;i<n;i++)//其实就是排序
    		for(int j=i+1;j<n;j++)
    		{
    			int leni=strlen(a[i]),lenj=strlen(a[j]);
    			strcpy(q,a[i]);//将a[i]复制到临时变量q中
    			for(int k=0;k<lenj;k++)
    				q[k+leni]=a[j][k];//将a[j]依次连接在q后面
    			strcpy(p,a[j]);
    			for(int k=0;k<leni;k++)
    				p[k+lenj]=a[i][k];//同上
    			if(strcmp(q,p)<0)
    			{
    				strcpy(t,a[i]);
    				strcpy(a[i],a[j]);
    				strcpy(a[j],t);
    			}//比较看是否要交换
    		}
    	for(int i=0;i<n;i++)
    		printf("%s",a[i]);//直接输出
    	return 0;
    }





                                                                                                                                                                              By WZY

  • 相关阅读:
    QuickClip—界面原型设计
    视频剪辑软件调研分析及使用感受——后附作品地址
    《梦断代码》——理智上悲观,意志上乐观
    《人月神话》—危险的神话
    zabbix监控交换机
    linux常用经典命令
    zabbix使用tokudb引擎替换innodb引擎
    CART分类回归树算法
    朴素贝叶斯分类算法
    分布式系统阅读笔记(十三)-----命名服务
  • 原文地址:https://www.cnblogs.com/LinqiongTaoist/p/7203773.html
Copyright © 2011-2022 走看看