| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 934 人关注过本帖
标题:新人,请大家帮帮忙
只看楼主 加入收藏
szszsz
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-12-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
新人,请大家帮帮忙
#include<stdio.h>
#define C 1000
int main()
{
    int i,j,t,d,n,b;
    scanf("%d",&t);
    for(i=0;i<t;i++)
    {
        scanf("%d",&n);
        int a[n];
        for(j=1,a[0]=0,b=0;j<=n;j++)
        {
            scanf("%d",&d);
            a[j]=d;
            if(a[j]-a[j-1]>=50) b++;
            if(j==n)
           {
               if(C-a[j]>=50)
               {
                   b++;
                   printf("%d\n",j+1);
               }
               else if(b==0) printf("BeiJuA\n");
               else printf("%d\n",j);   
            }      
        }   
    }
    system("pause");//提交时删除这行
    return 0;   
}   




已知两棵幸运树之间间隔10米,给出已有的N辆单车相对于左边幸运树的距离D(0 < D < 1000)(单位厘米),你希望还能找到一个大于等于50厘米的空位放单车,如果有多个这样的空位存在,放在最靠右的位置(因为可以少走几步)。
如果找不到,就只好大喊一声“杯具啊...”。

输入:
首先输入一个整数T(T< =10000),表示有T组数据。
每组数据第一行有一个整数N(0< N <= 100),代表已有N辆单车,接下来N行,每行一个整数D(0 < D < 1000),表示第i辆单车放在了距离左边幸运树D厘米的地方。
注意,N辆单车相对于左幸运树的距离会从小到大给出,且不会有两辆单车放在同一位置,即Di < Di+1。

输出:
对于每组测试数据,输出一行。
如果能找到位置放车,输出一个整数L,表示在第L辆单车左边放你的单车。L范围是1到N+1,1表示在第1辆单车的左边(左边的幸运树与第1辆车之间)放你的单车,N+1表示在第N辆单车与右边的幸运树之间放你的单车。
如果不能找到位置放单车,输出”BeiJuA”

样例输入:
2
1
999
2
50
100
样例输出:
1
3
搜索更多相关主题的帖子: 新人 
2010-12-11 15:36
freedgun
Rank: 5Rank: 5
等 级:职业侠客
帖 子:147
专家分:302
注 册:2010-11-11
收藏
得分:5 
没看明白

有什么样的付出,就有什么样的收获!!
2010-12-11 17:01
Shawty
Rank: 1
等 级:新手上路
帖 子:19
专家分:7
注 册:2010-11-29
收藏
得分:5 
貌似ACM的题目,可以偶也没看明白…
2010-12-11 17:49
gaochizhen33
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:114
专家分:101
注 册:2010-11-4
收藏
得分:5 
样例输入跟要求的不一样啊 没有显示每组数据里有几辆车啊
2010-12-11 18:07
szszsz
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-12-11
收藏
得分:0 
样例输入:
2----------有两组数据
1----------第一组数据中的自行车数
999--------自行车距离左边树的距离
2---------第二组数组中的自行车数
50--------第一辆自行车距离左边树的距离
100--------第二辆自行车距离左边树的距离
样例输出:
1--------第一组数据中得出的可停车位,即自行车的左边
3---------第二组数据中得出的可停最适车位,即第二辆自行车右边
2010-12-11 18:22
szszsz
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-12-11
收藏
得分:0 
实际运行时会在输入一组数据就输出结果,这个没关系
就是我在编译器上没问题,提交到OJ就错误
请各位帮帮忙
2010-12-11 18:24
gaochizhen33
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:114
专家分:101
注 册:2010-11-4
收藏
得分:0 
程序代码:
#include<stdio.h>       
#define C 1000
#define MAX 100
int main()                    //为了保证位置不重复 就省去了等于50厘米的情况
{
    int i,j,N,T;
    int a[MAX],b[MAX];            //数组a用来记录每组数据 数组b用来记录要停车位的位置
    scanf("%d",&T);
    for(j=0;j<T;j++)
    {
        scanf("%d",&N);
        for(i=0;i<N;i++)
            scanf("%d",&a[i]);        //每辆车距离左边的幸运树的距离
        if(C-a[N]>50)                //如果最右边的车距离右边的树大于50厘米,记录该停车位的位置
                b[j]=N+1;     
        for(i=0;i<N;i++)
            if(a[i+1]-a[i] > 50)   
            {
                b[j]=i+2;                    //如果在车中间有合适的停车位,数组从0开始,该车位的位置应该用数组下表加2
                break;
            }
            else if(b[j] != N+1)           
                b[j]=1000;                //如果没有合适的位置,则记录为1000,表示超出范围
        if(a[0] > 50)                    //如果在开始的位置有合适的停车位,记录为第一个停车位
            b[j] = 1;
    }
    for(i=0;i < T; i++)
        if(b[i] != 1000)
            printf("%d\n",b[i]);
        else
            printf("beijua\n");
    return 0;  
}  
2010-12-11 19:10
szszsz
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-12-11
收藏
得分:0 
您这个还是有错,不过还是谢谢您,您试着输入:
1
21
49
98
147
196
245
294
343
392
441
490
539
588
637
686
735
784
833
882
931
980
999
应该输出"BeiJuA",却输出"22"
能不能帮我找一下我的错在哪里了?我的测试在编译器上都没错,上OJ就不行了
2010-12-11 20:26
gaochizhen33
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:114
专家分:101
注 册:2010-11-4
收藏
得分:0 
程序代码:
#include<stdio.h>       
#define C 1000
#define MAX 100
int main()                    //为了保证位置不重复 就省去了等于50厘米的情况
{
    int i,j,N,T;
    int a[MAX],b[MAX];
    scanf("%d",&T);
    for(j=0;j<T;j++)
    {
        scanf("%d",&N);
        for(i=0;i<N;i++)
            scanf("%d",&a[i]);        //每辆车距离左边的幸运树的距离
        if(C-a[N-1]>50)                //如果最右边的车距离右边的树大于50厘米,记录该停车位的位置 这儿改了下 没有a[N]元素 回取随机值 写的时候没注意
            b[j]=N+1;
        for(i=1;i<N;i++)
            if(a[i]-a[i-1] > 50)   
            {
                b[j]=i+2;                    //如果在车中间有合适的停车位,数组从0开始,该车位的位置应该用数组下表加2
                break;
            }
            else if(b[j] != N+1)           
                b[j]=1000;                //如果没有合适的位置,则记录为1000,表示超出范围
        if(a[0] > 50)                    //如果在开始的位置有合适的停车位,记录为第一个停车位
            b[j] = 1;
    }
    for(i=0;i < T; i++)
        if(b[i] != 1000)
            printf("%d\n",b[i]);
        else
            printf("BeiJuA\n");
    return 0;  
} 
你用的是什么编辑器 不知道int a[n]这种语句行不行 我的好像通过不了 你那个我再看看

[ 本帖最后由 gaochizhen33 于 2010-12-11 21:57 编辑 ]
2010-12-11 21:41
gaochizhen33
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:114
专家分:101
注 册:2010-11-4
收藏
得分:0 
你的那个我也不怎么明白 呵呵 我也是个新手 。
不过我感觉你那个写法好像很混乱,在循环写入的过程中,又会有输出,那输出的结果好像跟题目要求的结果样式不一样。
在每组数据中,每次写入一个距离都要进行一次判断,直到写到规定的数量为止,然后输出结果。
感觉总体的算法还是正确的 就是有些繁琐,过多的参数出现检查起来也会麻烦 比如b你记录的是停车位的总数量,感觉就没有必要,只要求出在第几个就行,用数组元素的下表就可以了。
在你的编辑器测试没问题,上OJ就有问题可能就是编辑器的问题了 起码你的代码在我的编辑器里是通不过的 不过你的主要的计算方法还是正确的
2010-12-11 21:55
快速回复:新人,请大家帮帮忙
数据加载中...
 
   



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

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