| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1314 人关注过本帖
标题:我真的真的真的很想知道答案,谢谢将要路过了的,进来了的大牛了们,感激不 ...
只看楼主 加入收藏
icanbestrong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:138
注 册:2013-3-13
收藏
得分:0 
祝大家国庆快乐
2014-10-01 19:29
icanbestrong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:138
注 册:2013-3-13
收藏
得分:0 
程序代码:
#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 count){
int i;
char newqq[4];
//在当前数组中查找
strcpy(newqq,qq);
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(newqq,xinde[i].y);
//若两相等且.num==temp,说明找到了该语句
if(strcmp(newqq,weixin)==0&&temp)
return 1;
//若.num!=temp,说明两个语句相互矛盾
if(strcmp(newqq,weixin)==0&&!temp)
return 0;
//其他情况说明还在中间节点,还需往下走
panduan(newqq,weixin,temp,xinde,xianzai,count+1);
    }

//如果.num==0
else 
{
//如果temp==0
if(!temp)
{
strcpy(newqq,xinde[i].y);
//如果两个相等了说明找到了原语句
if(strcmp(newqq,weixin)==0)
return 1;
else continue;
//其他情况由于路不通所以终止,所以省略了continue
}
else continue;
}

 }
else
{
if(strcmp(xinde[i].x,weixin)==0&&strcmp(xinde[i].y,qq)==0&&temp+xinde[i].num==2)
return 0;   
else continue;
}
}
//若循环结束后还仍为返回,就说明与当前不冲突
if(count==1)
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];
qq[i]='\0';
if(string[i+7]!=' ')
{
for(l=i+4;string[l]!='\0';l++)
weixin[l-i-4]=string[l];
weixin[l-i-4]='\0';
temp=1;
}
else
{
for(l=i+8;string[l]!='\0';l++)
weixin[l-i-8]=string[l];
weixin[l-i-8]='\0';
temp=0;
}
//printf("%s",weixin);
//判断*xianzai是否为0,为0就储存在结构体数组xinde中
if(*xianzai==0)
{
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,1);
if(value==0)  return j;
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[50];
int i=0;
liangshu xinde[200];
int xianzai=0;
//输入需要测试几组
scanf("%d",&T);
while(i<T){
//输入每组测试的句子数
scanf("%d",&N);
N=N+1;
semaphore=1;
for(j=0;j<N;j++)
{
//输入每个句子
gets(string);
//对于每组要是发现返回值不为零就跳出,并保存
if(j==0) continue;
if(semaphore)
answer[i]=jiexi(string,j,xinde,&xianzai);
if(answer[i]!=0) semaphore=0;
}
i++;
}
for(i=0;i<xianzai;i++)
//printf("%s %s\n",xinde[i].x,xinde[i].y);
for(i=0;i<T;i++)
//输入每组测试的结果
printf("%d\n",answer[i]);
system("pause");
return 0;
}

2014-10-15 20:03
icanbestrong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:138
注 册:2013-3-13
收藏
得分:0 
这是我自己仔细检查后得出的目前来说是正确的代码。很感谢黑崎一护大侠的点播,让我懂得不要过早放弃。和先前的代码比较,之前错的部分有两处都是一些小问题。
其一是给字符串赋值时未添加‘\0'导致非法操作内存;
其二是一些辅助变量应该在每次循环之前赋初值,之前位注意这一点,导致辅助变量值越变越大,未达到理想状态。
总之,自己又上了个台阶,很开森。
I still need walk a long way
2014-10-15 20:10
快速回复:我真的真的真的很想知道答案,谢谢将要路过了的,进来了的大牛了们,感 ...
数据加载中...
 
   



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

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