| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 541 人关注过本帖
标题:求解一道C题目,代码已完成,编译错误???
只看楼主 加入收藏
jkli41792844
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2010-1-10
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
求解一道C题目,代码已完成,编译错误???
因刚创建帐号,分数不多,不过已经是全部分数了,望大家帮忙.
错误是,输入的点高于一定数量时会直接跳过编译,输出gift=XXXXXX(一个很大的数字);


这是题目:

圣诞节的礼物

描述

看到吴清锋老师给大家送了很多礼物,swgr决定也送大家一些礼物。但是这个礼物可没那么容易被拿到!他将所有的礼物放在了一个一个的梅花桩上,你只有走到了那个梅花桩上才能拿到那个礼物。但是这样有的人根本就拿不到礼物!旺旺想要知道,他到底能不能拿到礼物……

输入

第一行为两个正整数n和一个正数d(小数点后不会超过两位),分别代表梅花桩的数目和旺旺能跨越的最远距离。

下面n行有三个数x,y和f。x和y代表这个桩的坐标(小数点后不会超过两位),f保证只有可能取-1,0,1中的一个值。当f=-1时,意味着这是旺旺的起点(起点有且仅有一个);当f=0时,代表这个桩没有礼物;当f=1时,代表这个桩有一物。

n <= 50; 0 <= d <= 100; -100 <= x, y <= 100

输出

一个整数,代表旺旺能拿到的最多礼物数量。

(样例见下页)Sample1

样例输入

2 2

0 0 -1

0 1 1

样例输出

1

Sample1

样例输入

2 2

0 0 -1

0 2 1

样例输出

1

Sample2

样例输入

2 2

0 0 -1

0 3 1

样例输出

0



以下是本人写的代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define TRUE 1
#define FALSE 0
#define GIFT 1
#define NOGIFT 0
#define BEGIN -1
#define TEST FALSE


struct point{
    float x;
    float y;
    int state;
    int tried;
};

int gift=0;

int getpoint(struct point point[],int i,FILE *fp)
{fscanf(fp,"%f%f%d",&point[i].x,&point[i].y,&point[i].state);
 point[i].tried=FALSE;
 return 0;
}

int putpoint(struct point point[],int i)
{printf("%.2f %.2f %d %d \n",point[i].x,point[i].y,point[i].state,point[i].tried);
 return 0;
}

int getgift(struct point point[],int stand,int n,float distance)
{
    int i;
    float space;
    if(point[stand].tried) return 0;
    if(point[stand].state==GIFT) {gift++; point[stand].state=NOGIFT;}
    point[stand].tried=TRUE;
    for(i=0;i<n;i++)
    {   if(point[i].tried) continue;
        space=(float)sqrt(pow((point[stand].x-point[i].x),2)+pow((point[stand].y-point[i].y),2));
        if(space-distance<1e-6)
             if(getgift(point,i,n,distance)) return 1;
    }
    return 0;
}

int main()
{  
    struct point point[50];
    int n,i,t;
    float distance;
    FILE *fp;
#if (TEST==TRUE)
    if((fp=fopen("ttt","r"))==NULL)
    {printf("Cannot open it\n");system("pause");return 0;}
#else
    fp=stdin;
#endif;
    fscanf(fp,"%d%f\n",&n,&distance);
    for(i=0;i<n;i++){
        getpoint(point,i,fp);
#if (TEST==TRUE)
        putpoint(point,i);
#endif
    }
    for(i=0;i<n;i++){
        if(point[i].state ==BEGIN)
            getgift(point,i,n,distance);
        for(t=0;t<n;t++)
            point[i].tried =FALSE;
    }
    printf("%d\n",gift);
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: 求解 代码 编译 
2010-01-10 12:52
爱无界的痛
Rank: 2
等 级:论坛游民
帖 子:5
专家分:22
注 册:2010-1-10
收藏
得分:20 
  看样子  没错  你再试试
2010-01-10 14:20
jkli41792844
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2010-1-10
收藏
得分:0 
其实,我已经试过好多次了..

2010-01-28 12:17
快速回复:求解一道C题目,代码已完成,编译错误???
数据加载中...
 
   



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

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