• hdu 模拟 贪心 4550


                                        卡片游戏
    
    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
    Total Submission(s): 1704    Accepted Submission(s): 500
    
    
    Problem Description
      小明最近宅在家里无聊,于是他发明了一种有趣的游戏,游戏道具是N张叠在一起的卡片,每张卡片上都有一个数字,数字的范围是0~9,游戏规则如下:
      首先取最上方的卡片放到桌子上,然后每次取最上方的卡片,放到桌子上已有卡片序列的最右边或者最左边。当N张卡片全部都放到桌子上后,桌子上的N张卡片构成了一个数。这个数不能有前导0,也就是说最左边的卡片上的数字不能是0。游戏的目标是使这个数最小。
      现在你的任务是帮小明写段程序,求出这个最小数。
     
    
    Input
    第一行是一个数T,表示有T组测试数据;
    然后下面有T行, 每行是一个只含有0~9的字符串,表示N张叠在一起的卡片,最左边的数字表示最上方的卡片。
    
    [Technical Specification]
    T<=1000
    1 <= N <= 100
     
    
    Output
    对于每组测试数据,请在一行内输出能得到的最小数。
     
    
    Sample Input
    3
    565
    9876543210
    9876105432
     
    
    Sample Output
    556
    1234567890
    1678905432
     
    
    Source
    2013金山西山居创意游戏程序挑战赛——初赛(2)
     
    
    Recommend
    liuyiding   |   We have carefully selected several similar problems for you:  5634 5633 5632 5631 5630                     

          

     1 /*
     2     分析 : 给你的一串数字中  大致 分为两种情况  1 : 有 0 2: 无 0
     3     之所以 有这两种情况是因为 0 不能放在开头
     4     现在  考虑一下 这两种情况 能不能尽量的合并处理    应该能
     5                                                                    */
     6 //找到 所给的 数字钟最靠后并且最小(第一次的时候,不能是0)数字,这个数字就放在 开头 这个数字后面跟随的数字就放在最末位 ,
     7 // 然后 除了这几个数字 剩下的前面的数字也执行此操作(这次 最小的数字 可以是0 )然后  放到上一次 排列数字的中间
     8 #include<cstdio>
     9 #include<cstring>
    10 #include<algorithm>
    11 using namespace std;
    12 int main()
    13 {
    14     char a[111];
    15     int b[111],i,j,q,m,n,l,miin,address,c[111],begin,end;   //begin 和 end 分别代表着   最后队列里 还未填充 部分的 开始 和结束
    16     scanf("%d",&n);
    17     while(n--)
    18     {
    19         scanf("%s",a);
    20         l=strlen(a);
    21         for(miin=1000,i=0;i<l;i++)
    22         {
    23             b[i]=a[i]-'0';
    24         }
    25         q=begin=0;
    26         address=10;
    27         while(address)
    28         {
    29             for(i=0;i<l;i++)
    30             {
    31                 if(b[i]==11)
    32                     break;
    33                 if(q==0)
    34                 {
    35                     if(miin>=b[i]&&b[i]!=0)
    36                     {
    37                         address=i;             //找到最后一个最小且不等零的数字的 地址
    38                         miin=b[i];
    39                     }
    40                 }
    41                 else
    42                     if(miin>=b[i])
    43                     {
    44                         address=i;
    45                         miin=b[i];
    46                     }
    47             }
    48             miin=1000;
    49             q++;
    50             c[begin++]=b[address];
    51             b[address]=11;
    52         }
    53         for(i=0;i<begin;i++)
    54             printf("%d",c[i]);
    55         for(i=0;i<l;i++)
    56         {
    57             if(b[i]!=11)
    58                 printf("%d",b[i]);
    59         }
    60         printf("
    ");
    61         memset(a,'0',sizeof(a));
    62     }
    63 }
  • 相关阅读:
    struts2--表单重复提交
    struts2--文件上传与下载
    springboot配置redis+jedis,支持基础redis,并实现jedis GEO地图功能
    Mybatis配置——自动使用驼峰命名 属性映射字段(默认为false)
    解决PageHelper.startPage(page, size)后,关于PageInfo的total等属性不正确等问题
    Socket网络通信——IO、NIO、AIO介绍以及区别
    FTPClient TLS 与 FTP 进行数据传输异常:Remote host closed connection during handshake
    常用Concurrent.util包工具类——高并发
    线程池——Executors
    多线程的设计模式:Future、Master-Worker
  • 原文地址:https://www.cnblogs.com/A-FM/p/5222933.html
Copyright © 2020-2023  润新知