• 【 OJ 】趣味游戏 (runtime error。。。。)已解决。附大神解决方式。


    趣味比赛

    发布时间: 2017年12月12日 16:36   最后更新: 2017年12月12日 16:44   时间限制: 1000ms   内存限制: 128M   SPJ

    小明参加了学校举办的火眼金睛趣味比赛,比赛的规则是这样的:由若干男生和若干女生组成的队伍站成一排,小明要在最短的时间内在队伍中找到一个人,这个人前面的男生的个数等于从他开始的队伍(包含他自己)中女生的个数。小明现在很头疼,比赛方规定小明可以求助好友,作为他的好朋友,请你帮帮他。 输出要求的人的位置,若不存在输出No Response

    第一行是一个整数T代表测试用例组数。
    每个测试用例的第一行是一个整数n代表队伍长度;第二行是一个长度为n的字符串,使用M代表男生,F代表女生。题目保证字符串合法(即不含其他字母)。(1<=n<=1e6)(人从0开始编号)

    对于每个测试用例输出要求的位置,若位置不存在则输出 “No Response”(不含分号)。若有多个位置满足题意则输出任意一个。

    1
    2
    MF
    1
    代码
      竟然一直没有意识到 如MM 的情况,此时应该输出0!!!!!!!!!!!!!
      下为1.0版,执行结果RunTime Error.
     1 #include <stdio.h>
     2 int main(){
     3     int n,m,x,y;
     4     int i = 0,j,k;
     5     char people[100000];
     6 
     7     scanf("%d",&n);
     8     while(i < n){
     9         scanf("%d",&m);
    10         getchar();
    11         scanf("%s",people);
    12         people[m] = '';
    13         if(m < 2){
    14             printf("No Response");
    15             if(i != n-1)
    16                 printf("
    ");
    17             continue;
    18         }
    19         j = 1;
    20         while(j < m){
    21             k = 0;
    22             x = 0;
    23             y = 0;
    24             while(k < m){
    25                 if(k < j){
    26                     if(people[k] == 'M')
    27                         x++;
    28                 }else{
    29                     if(people[k] == 'F')
    30                         y++;
    31                 }
    32                 k++;
    33             }
    34             if(x == y && x != 0){
    35                 printf("%d",j);
    36                 break;
    37             }
    38             j++;
    39         }
    40         if(j == m && x != y)  <<<<<<<<<<<<<<<----------------
    41             printf("No Response");
    42         if(i != n-1)
    43                 printf("
    ");
    44         i++;
    45     }
    46     return 0;
    47 }

      下为编程论坛  rjsp  版主提供的解决方案

      我写的简直渣到爆。。看看人家写的优雅的不要不要的

     1 #include <stdio.h>
     2 
     3 int main( void )
     4 {
     5     unsigned t;
     6     scanf( "%u", &t );
     7     while( t-- )
     8     {
     9         unsigned n;
    10         scanf( "%u", &n );
    11         char team[1000001];
    12         scanf( "%s", team );
    13 
    14         unsigned f_num = 0;
    15         for( size_t i=0; team[i]; ++i )
    16             if( team[i] == 'F' )
    17                 ++f_num;
    18 
    19         unsigned m_num=0, index;
    20         for( index=0; team[index] && m_num<f_num; ++index )
    21         {
    22             if( team[index] == 'F' )
    23                 --f_num;
    24             else
    25                 ++m_num;
    26         }
    27         if( team[index] && m_num==f_num )
    28             printf( "	%u
    ", index );
    29         else
    30             puts( "No Response" );
    31     }
    32 }

      在接下来是编程论坛 九转星河 版主给出的另一种思路

        补充一下~

        好像只有全部女生的时候没有位置~

        其实还可以用头尾指针向中间靠拢的方法,两个指针相遇的位置就是所求位置~

    再次感谢各位大神的帮助,我也会更努力的!

    道阻且长,行则将至。
  • 相关阅读:
    zbb20190605 maven windows配置maven私服以及使用
    zbb20190528 城市经纬度json
    zbb20190528 adcode 城市编码
    zbb20190430 springboot 配置alimq
    zbb20190408 spring-boot-maven-plugin 插件的作用详解
    zbb20190131 Mybatis,mysql映射文件<!CDATA[[]]> 转义问题
    Spring Boot (29) 定时任务
    Spring Boot (28) actuator与spring-boot-admin
    Spring Boot (27) actuator服务监控与管理
    Java 8
  • 原文地址:https://www.cnblogs.com/forfriendforfun/p/8111211.html
Copyright © 2020-2023  润新知