zoukankan      html  css  js  c++  java
  • P1083龙舟比赛

    题目如下:

    现在正在举行龙舟比赛,我们现在获得了最后冲刺时的俯视图像,现在你要输出各条龙舟的名次。

    这张图像由r行c列的字符组成,每行的最左边的字符表示起点,所以字符为’S’,最右边的字符为’F’。并且确定在9行里有数字字符1..9,来表示每条龙舟的编号,保证包含数字的行里,只包含连续的相同的3个数字。其余地方都是字符’.’。 具体看样例。越靠近右边的龙舟排名越靠前。如果有并列的,那么他们的名次相同。

    输入:

    10 15
    S..........222F
    S.....111.....F
    S...333.......F
    S...555.......F
    S.......444...F
    S.............F
    S......777....F
    S..888........F
    S........999..F
    S...666.......F

    输出:

    5
    1
    6
    3
    6
    6
    4
    7
    2

    *****************************************************

    此题略坑,正在码代码,但代码码到自己都不想看了;

    思路如下:

    首先读入,然后遇见字符为1-9的就读入他的号码,然后用最右边的号码减去它的号码就是它到终点的距离。然后排序,然后输出

    ******************************************************

    思路简单到不能再简单哪,但是实现很复杂

    首先不能用sort排序,因为sort 会改变数组下标,这就很尴尬了,最开始用了两个sort,后来发现不行,会改数组,没办法按序输出;

    只能用最原始的排序方法,在数组0处设置一个缓冲区,这个区用来储存后面待排序的量。

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    int r,c;
    struct boat
    {
     int num,dis,rank;
    }boats[11];
    char b[55]={};
    void init()
    {
     cin>>r>>c;
     for(int i=1;i<=r;i++)
     {
      for(int j=1;j<=c;j++)
      {
       cin>>b[j];
                if((b[j]>='1')&&(b[j]<='9'))
                {
                    boats[int(b[j])-48].num=int(b[j])-48; 
                    boats[int(b[j])-48].dis=c-j;
    			}
      }
     }
    }
    void work()
    {
       for(int i=1;i<9;i++)
            for(int j=i+1;j<=9;j++)
                if(boats[i].dis>boats[j].dis)
                {
                   boats[0]=boats[i];
                    boats[i]=boats[j];
                    boats[j]=boats[0];
                }
        for(int i=1;i<=9;i++)
        {
            if (boats[i].dis==boats[i-1].dis)
                boats[i].rank=boats[i-1].rank;
            else boats[i].rank=boats[i-1].rank+1;
        }//paixu.orz
     for(int i=1;i<9;i++)
            for(int j=i+1;j<=9;j++)
                if(boats[i].num>boats[j].num)
                {
                    boats[0]=boats[i];
                    boats[i]=boats[j];
                    boats[j]=boats[0];
                }//num	sort	orz
        for(int i=1;i<=9;i++)
            cout<<boats[i].rank<<endl;
    }
    int main()
    {
     
     cin>>r>>c;
     for(int i=1;i<=r;i++)
     {
      for(int j=1;j<=c;j++)
      {
       cin>>b[j];
                if((b[j]>='1')&&(b[j]<='9'))
                {
                    boats[int(b[j])-48].num=int(b[j])-48; 
                    boats[int(b[j])-48].dis=c-j;
    			}
      }
     }
     work();
     
     return 0;
    }



  • 相关阅读:
    JavaScript 实现打印操作
    linux-centos7.6设置固定IP网络方法
    VMware网络配置三种网络模式(桥接、NAT、Host-only)
    SVN 执行cleanup报错:Cleanup failed to process the following paths
    word生成目录的pdf
    win10开机后将存在多个系统选择,改为直接进入系统无需选择
    Win10删除或是不显示快速访问中最近使用文件记录
    Dell T30解决报Alert! Cover was previously removed.
    WIN10安装.net报0x800F081F解决方法
    查看SVN当前登录用户
  • 原文地址:https://www.cnblogs.com/supersumax/p/5882471.html
Copyright © 2011-2022 走看看