chinalixs 发表于 2015-2-16 00:05

为啥输出会多一位比答案

我在dev-c上测试没问题的。

题目:
输入包括两行,每行包括N个数字(1≤N≤50),分别表示两个人对于N个事情对应的看法——0表示不赞同、1表示赞同。两数相同输出1,不同输出0.输出包括一行,包括N个数字,表示两人相遇后,对于这N件事情的最终看法。样例输入1110010100101011
样例输出00110001我的代码:#include <stdio.h>

int main()
{
      char a;
      char *p1=a;
      char *p2=a;
      char *p3=a;
      //输入两组数据
      gets(p1);
      gets(p2);
      
for(;*p1!='\0';)
      {
                if(*p1==*p2)
                *p3='1';
                if(*p1!=*p2)
                *p3='0';
                p1++;
                p2++;
                p3++;
      }
      
      *p3='\0';
      puts(a);
      return 0;
}         

homer 发表于 2015-2-16 12:59

....你的代码应该没问题的,感觉是那边将两个最后的“\0”也进行了比较,得出1,。所以,单纯为了过这个测试的话,在p3=“\0”前加一个 p3--,就行了。
#include <stdio.h>

int main()
{
      char a;
      char *p1=a;
      char *p2=a;
      char *p3=a;
      //输入两组数据
      gets(a);
      gets(a);
         
for(;*p1!='\0'&&*p2!='\0';)
      {
                if(*p1==*p2)
                *p3='1';
                else
                *p3='0';
                p1++;
                p2++;
                p3++;
      
      }
         p3--;
      *p3='\0';
      puts(a);
      return 0;
}

chinalixs 发表于 2015-2-16 00:06

@homer @醉空流澈

发誓要永远 发表于 2015-2-16 13:01

这个是大牛,@Peace

chinalixs 发表于 2015-2-16 13:31

homer 发表于 2015-2-16 12:59
....你的代码应该没问题的,感觉是那边将两个最后的“\0”也进行了比较,得出1,。所以,单纯为了过这个测试 ...

对对。那边将两个最后的“\0”也进行了比较,得出1。可是我自己在编译器试是不会得出这个1的啊。p3--我试过也不行。

chinalixs 发表于 2015-2-16 13:50

homer 发表于 2015-2-16 12:59
....你的代码应该没问题的,感觉是那边将两个最后的“\0”也进行了比较,得出1,。所以,单纯为了过这个测试 ...

用p3--真的解决了!我以前是把p3--;放在了
        *p3='\0';后面

听你的放在前面就通过了。不过我自己有点懵

chinalixs 发表于 2015-2-16 13:52

homer 发表于 2015-2-16 12:59
....你的代码应该没问题的,感觉是那边将两个最后的“\0”也进行了比较,得出1,。所以,单纯为了过这个测试 ...

不懂为什么自己在编译器运行就不会判断最后那组'0'。p3--说明在最后那次p3++指针后移,然后再p3--前移。然后再赋值。没有覆盖最后那个p3里存的数?

我刚开始学指针有点乱~

homer 发表于 2015-2-16 17:18

chinalixs 发表于 2015-2-16 13:52
不懂为什么自己在编译器运行就不会判断最后那组'0'。p3--说明在最后那次p3++指针后移,然后再p3--前移。 ...

你是对的,是那边的问题。
其实有时候如果不能得出正确结果,你可以尝试另一种方法啊,例如这里,既然不能通过的话,就单纯用字符数组解决

醉空流澈 发表于 2015-2-16 20:35

我也觉得是结尾标志的原因,编译器原因吧。
1 1 1 0 0 1 0 1 \0
0 0 1 0 1 0 1 1 \0
0 0 1 1 0 0 0 1 1
for完后,指针在a,自减就到了a,再赋值为\0,也就是
0 0 1 1 0 0 0 1 \0
了。
页: [1]
查看完整版本: 为啥输出会多一位比答案