| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2036 人关注过本帖
标题:【oj】 趣味比赛 runtime error不造问题出在哪。。求大神指教。。
只看楼主 加入收藏
浮世的烧酒丶
Rank: 2
等 级:论坛游民
帖 子:19
专家分:21
注 册:2016-10-20
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:9 
【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
1
2
MF
样例输出1
1
程序代码:
#include <stdio.h>
int main(){
    int n,m,x,y;
    int i = 0,j,k;
    char people[100000];

    scanf("%d",&n);
    while(i < n){
        scanf("%d",&m);
        getchar();
        scanf("%s",people);
        people[m] = '\0';
        if(m < 2){
            printf("No Response");
            if(i != n-1)
                printf("\n");
            continue;
        }
        j = 1;
        while(j < m){
            k = 0;
            x = 0;
            y = 0;
            while(k < m){
                if(k < j){
                    if(people[k] == 'M')
                        x++;
                }else{
                    if(people[k] == 'F')
                        y++;
                }
                k++;
            }
            if(x == y && x != 0){
                printf("%d",j);
                break;
            }
            j++;
        }
        if(j == m && x != y)
            printf("No Response");
        if(i != n-1)
                printf("\n");
        i++;
    }
    return 0;
}
搜索更多相关主题的帖子: 比赛 输出 Response people printf 
2017-12-25 21:11
浮世的烧酒丶
Rank: 2
等 级:论坛游民
帖 子:19
专家分:21
注 册:2016-10-20
收藏
得分:0 
自己找到一个错,但还是runtime error。。
程序代码:
#include <stdio.h>
int main(){
    int n,m,x,y;
    int i = 0,j,k;
    char people[100000];

    scanf("%d",&n);
    while(i < n){
        scanf("%d",&m);
        getchar();
        scanf("%s",people);
        people[m] = '\0';
        if(m < 2){
            printf("No Response");
            if(i != n-1)
                printf("\n");
            continue;
        }
        j = 1;
        while(j < m){
            k = 0;
            x = 0;
            y = 0;
            while(k < m){
                if(k < j){
                    if(people[k] == 'M')
                        x++;
                }else{
                    if(people[k] == 'F')
                        y++;
                }
                k++;
            }
            if(x == y && x != 0){
                printf("%d",j);
                break;
            }
            j++;
        }
        if(j == m)                                //这里改了改
            if(x != y || ( x == y && x == 0))  
                printf("No Response");
        if(i != n-1)
                printf("\n");
        i++;
    }
    return 0;
}
2017-12-25 21:59
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
收藏
得分:0 
这个m代表啥?
程序代码:
scanf("%d",&n);
    while(i < n){
        scanf("%d",&m);
        getchar();
        scanf("%s",people);

2017-12-25 22:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9029
专家分:54050
注 册:2011-1-18
收藏
得分:15 
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned t;
    scanf( "%u", &t );
    while( t-- )
    {
        unsigned n;
        scanf( "%u", &n );
        char team[1000001];
        scanf( "%s", team );

        unsigned f_num = 0;
        for( size_t i=0; team[i]; ++i )
            if( team[i] == 'F' )
                ++f_num;

        unsigned m_num=0, index;
        for( index=0; team[index] && m_num<f_num; ++index )
        {
            if( team[index] == 'F' )
                --f_num;
            else
                ++m_num;
        }
        if( team[index] && m_num==f_num )
            printf( "\t%u\n", index );
        else
            puts( "No Response" );
    }
}

6
1
M
// 输出 0
2
MM
// 输出 0
1
F
// 输出 No Response
2
FF
// 输出 No Response
2
MF
// 输出 1
8
MFMFMFMF
// 输出 4
2017-12-26 10:27
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
补充一下~

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

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

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-26 11:31
浮世的烧酒丶
Rank: 2
等 级:论坛游民
帖 子:19
专家分:21
注 册:2016-10-20
收藏
得分:0 
回复 3楼 虫眼
m是字符长度,也就是题中的人数n
2017-12-26 17:55
浮世的烧酒丶
Rank: 2
等 级:论坛游民
帖 子:19
专家分:21
注 册:2016-10-20
收藏
得分:0 
回复 4楼 rjsp
多谢多谢!代码过了!
看到大神们的代码,再看看自己写的真的会自惭形秽。。
我会努力的!大神也要加油!
再次感谢!
2017-12-26 18:04
浮世的烧酒丶
Rank: 2
等 级:论坛游民
帖 子:19
专家分:21
注 册:2016-10-20
收藏
得分:0 
回复 5楼 九转星河
多谢大神的指点~
感觉还是自己见得太少,遇到啥都想最简单的方法。。
多听牛人看法,多看大神代码!
加油!
再次感谢!
2017-12-26 18:07
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
我有一个想法:
用一个指针p从前往后找男生,找到一个男生就用另一个指针q从后往前找女生;找到女生就
继续移动指针p找男生、移动指针q找女生……

直到两个指针相遇,相遇的那个位置就是题目所要找的那个目标位置,输出即可。

φ(゜▽゜*)♪
2017-12-26 19:45
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 9楼 书生牛犊
以下是引用九转星河在2017-12-26 11:31:27的发言:

补充一下~

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

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



不就是5楼的补充嘛~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-26 20:33
快速回复:【oj】 趣味比赛 runtime error不造问题出在哪。。求大神指教。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019787 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved