| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1314 人关注过本帖
标题:我真的真的真的很想知道答案,谢谢将要路过了的,进来了的大牛了们,感激不 ...
只看楼主 加入收藏
icanbestrong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:138
注 册:2013-3-13
结帖率:50%
收藏
已结贴  问题点数:100 回复次数:12 
我真的真的真的很想知道答案,谢谢将要路过了的,进来了的大牛了们,感激不尽呐
程序代码:
这是输入输出:
I
1
5
ttt is aaa
ttt is bbb
aaa is bbb
aaa is ttt
bbb is not aaa
O
4
说明:
第一行表示测试数据组数
第二行表示每组的语句数
之后N行表示语句
输出表示最先产生矛盾的行数,若没有矛盾,输出0
    为了不耽搁大牛们过多的时间,也为了体现我真的想知道问题出错到哪的诚意,我简要说明一下我的思想。
我认为对于每组例子,逐行扫描语句,这就相当于构建一个有向图的过程,每次在添加点和边之前要确认这条边是否与当前的图冲突,
即产生无向边的时候就说明出错啦,返回该行号即可;若能在当前的图中通过传递性找到了该边,就说明不矛盾,返回局部正确的0即可;
若在当前图中没找到,就说明也不矛盾,添加该边即可,返回局部正确的0即可。
    这是我想了好几天的思想和程序,可以运行过去,但是当我输入第二行语句时,程序就崩了,意外就停止工作了,请高人为我指点迷津。
我也算是学了两年的c了,总感觉自己还不够游刃有余,差的远,可能脑子笨点,能有大牛给我说说我该怎木提高自己的思维和编程能力吗,好歹
我也想在大学期间获获奖
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义结构体装is前后两个量,num判断是否有not,有为0
struct liangshu{
char x[4];
char y[4];
int num;
};
//
int panduan(char qq[],char weixin[],int temp,liangshu xinde[],int xianzai){
int i;
//在当前数组中查找
for(i=0;i<xianzai;i++)
{
//找到与当前qq字符串相等的字符串
if(strcmp(qq,xinde[i].x)==0)

 {
//xinde[i]的num若存在,就说明.x与.y之间有路
if(xinde[i].num==1)
    {
                  
    //复制.y字符串给qq
strcpy(qq,xinde[i].y);
//若两相等且.num==temp,说明找到了该语句
if(strcmp(qq,weixin)==0&&temp)
return 1;
//若.num!=temp,说明两个语句相互矛盾
if(strcmp(qq,weixin)==0&&!temp)
return 0;
//其他情况说明还在中间节点,还需往下走
panduan(qq,weixin,temp,xinde,xianzai);
    }
//如果.num==0
else 
{
//如果temp==0
if(!temp)
{
strcpy(qq,xinde[i].y);
//如果两个相等了说明找到了原语句
if(strcmp(qq,weixin)==0)
return 1;
//其他情况由于路不通所以终止,所以省略了continue
}
}
}
}
//若循环结束后还仍为返回,就说明与当前不冲突
return -1;
}
int jiexi(char string[20],int j,liangshu xinde[200],int *xianzai){
char qq[4];
char weixin[4];
int i;
int l;
int value;
int temp;
//分析字符串,取出is前后两个量以及是否有not,
for(i=0;string[i]!=' ';i++)
qq[i]=string[i];
if(string[i+7]!=' ')
{
for(l=i+4;string[l]!='\0';l++)
weixin[l-i-4]=string[l];
temp=1;
}
else
{
for(l=i+8;string[l]!='\0';l++)
weixin[l-i-8]=string[l];
temp=0;
}
//判断*xianzai是否为0,为0就储存在结构体数组xinde中
if(!*xianzai)
{
strcpy(xinde[*xianzai].x,qq);
strcpy(xinde[*xianzai].y,weixin);
xinde[*xianzai].num=temp;
(*xianzai)++;
}
//根据返回值做相应操作,若为0,说明有矛盾,返回该行行号;若为1,则说明
//在xinde数组中找到这样一条路;若为-1,则说明与当前不矛盾,将数据插入数组即可
else
value=panduan(qq,weixin,temp,xinde,*xianzai);
if(value==0)  return j+1;
if(value==-1) {
strcpy(xinde[*xianzai].x,qq);
strcpy(xinde[*xianzai].y,weixin);
xinde[*xianzai].num=temp;
(*xianzai)++;
}
return 0;
}
int main(){
int T;
int N;
int j;
int semaphore;
int answer[50]={0};
char string[20];
int i=0;
liangshu xinde[200];
int xianzai=0;
//输入需要测试几组
scanf("%d",&T);
while(i<T){
//输入每组测试的句子数
scanf("%d",&N);
semaphore=1;
for(j=0;j<N;j++)
{
//输入每个句子
scanf("%s",string);
//对于每组要是发现返回值不为零就跳出,并保存
if(semaphore)
answer[i]=jiexi(string,j,xinde,&xianzai);
if(answer[i]!=0) semaphore=0;
}
i++;
}
for(i=0;i<T;i++)
//输入每组测试的结果
printf("%d\n",answer[i]);
return 0;
}

搜索更多相关主题的帖子: 矛盾 
2014-09-29 21:18
wssy213
Rank: 12Rank: 12Rank: 12
来 自:湖南
等 级:贵宾
威 望:10
帖 子:967
专家分:3703
注 册:2014-6-6
收藏
得分:15 
I          //这是第一行?!
1          //若这是第一行,从这开始输入,程序并未崩溃呀
5
ttt is aaa
ttt is bbb
aaa is bbb
aaa is ttt
bbb is not aaa
O
4

坚持----------------------------------唯一的道路
shit ! ! !
2014-09-29 22:13
icanbestrong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:138
注 册:2013-3-13
收藏
得分:0 
不是,是从ttt is bbb开始崩的,我少打了个input和output
2014-09-29 22:45
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:15 
提高自己的思维能力首先从摒弃懒惰开始吧。如果不确信自己能把问题说清楚就把原题原原本本复制粘贴上来。一些你认为无所谓的细节很可能是解题的关键。

比如下面的问题:

1、语句中的名词由哪些字符构成?只有小写字母?还是也有大写字母?包含数字吗?

2、名词的长度上限是多少?一定在3个字符?可以小于3个字符?或者其实不止3个字符?

3、谓词只有is和is not两种?

关于上面的疑问你的原题中一定有详细说明,但你却没有重视。这是构造数据模型的关键。

重剑无锋,大巧不工
2014-09-29 23:05
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:15 
楼主你应该读一整行,因为其中有空格:fgets(string, 19, stdin);
还有这么多名字奇怪的变量和魔数,实在是难以理解,建议楼主有空注意一下, 如果楼主说的是ACM/ICPC的话,让队友能尽快读懂自己的代码也是很重要的

酱油实习生
2014-09-30 00:40
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:15 
回复 4 楼 beyondyf
大哥说的对啊!
1   :输入测试数据个数
5   
ttt is aaa
ttt is bbb
aaa is bbb
aaa is ttt
bbb is not aaa
O    :结果
4    :它是干什么的
为什么输出是0,bbb is not aaa是错的吧!

[ 本帖最后由 邓士林 于 2014-9-30 08:23 编辑 ]

Maybe
2014-09-30 08:14
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:15 
不太喜欢这种代码书写和注释的风格

思考赐予新生,时间在于定义
2014-09-30 09:12
dcl2014
Rank: 4
等 级:业余侠客
威 望:1
帖 子:58
专家分:273
注 册:2014-9-20
收藏
得分:15 
同楼上啊
2014-09-30 09:41
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:15 
以下是引用love云彩在2014-9-30 09:12:35的发言:

不太喜欢这种代码书写和注释的风格
同感
2014-09-30 14:47
icanbestrong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:138
注 册:2013-3-13
收藏
得分:0 
谢谢各位的提醒,我以后知道注意了
2014-10-01 18:25
快速回复:我真的真的真的很想知道答案,谢谢将要路过了的,进来了的大牛了们,感 ...
数据加载中...
 
   



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

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