zoukankan      html  css  js  c++  java
  • 考试题目“笨笨玩游戏”

    【题目描述】

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

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

    【输入】

    第1行:1 个整数N(1<=N<=50)

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

    【输出】

    第1行:生成的最大整数。

    【样例输入】

    123 124 56 90 

    【样例输出】

    9056124123

    这道题刚开始看,觉得直接用sort就行了,结果错了   T-T

    后来一想,原来有很多BUG,比如 234和2345,程序会输出 2342345

    明显不是最大的,所以要自己写sort函数(天下没有白来的!!)

     

    要考虑当两个数不一样长时,并且同样长的地方相等时要将长的尾部和短的头部作比较

     

     

    代码如下:

    <span style="font-size:12px;BACKGROUND-COLOR: #ffff99">#include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<stack>
    #include<queue>
    using namespace std;
    struct ill{
    	char s[100];
    }a[100];
    int n,i;
    bool fuu(ill x,ill y)
    {
    	int q=0,p=0;
    	for(int i=0;;i++)
    	{
    		if(x.s[q]<y.s[p])
    			return 0;
    		else if(x.s[q]>y.s[p])
    			return 1;
    		if(x.s[q+1]==0)
    		{
    			q=q;
    			if(x.s[q]<y.s[0])
    				return 1;
    		}
    		else
    			q++;
    		if(y.s[p+1]==0)
    		{
    			p=p;
    			if(y.s[p]<x.s[0])
    				return 0;
    		}
    		else
    			p++;
    		if(x.s[q+1]==0&&y.s[p+1]==0)
    			break;
    	}
    	if(x.s[q]<y.s[p])
    		return 0;
    	return 1;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(i=1;i<=n;i++)
    		scanf("%s",a[i].s);
    	sort(a+1,a+1+n,fuu);
    	for(i=1;i<=n;i++)
    		printf("%s",a[i].s);
    }
    </span>

     

    错了无数次

    终于AC了!!

  • 相关阅读:
    转:request.getSession(true)和request.getSession(false)的区别
    转:Linux中文显示乱码?如何设置centos显示中文
    Linux Centos 6.5_x86安装Nginx
    Java反射详解
    Java泛型
    泛型的通配符扩展
    文本分类:survey
    CRF++官方文档
    Paper: Bidirectional LSTM-CRF Models for Sequence Tagging
    PCA数学推导及原理(转)
  • 原文地址:https://www.cnblogs.com/Darknesses/p/12002584.html
Copyright © 2011-2022 走看看