c字梯的程序

时间:2015-07-04 07:24:58

标签: c word

我已经为word ladder编写了C代码。 它验证了给定的测试用例。但是对于1个测试用例,它的输出是错误的我没有在哪里进行更改。

问题

  

有一类单词拼图,你会得到两个单词,比如BEAK和MAKE,并且必须通过一次更改一个字母来从一个单词到另一个单词。解决这样的谜题需要良好的词汇量和一些横向思维,但是一旦有了解决方案就检查解决方案仅仅是乏味的并且适合于计算机来做。请注意,即使是正确的解决方案也不能保证最小化。

     

如果对于梯形图中的每对相邻单词,以下情况适用,则解决方案是正确的:

     
      
  • 它们的长度相同
  •   
  • 只有一个字母已更改。
  •   
     

编写一个程序,检查建议的解决方案。

     

输入格式:

     

输入将是一个解决方案,即它由一系列单词组成,每行一个,终止   由一行包含一个#。一个词是一个序列 - 在三到二十个大写字母之间。

     

输出格式:

     

根据需要输出“正确”或“不正确”一词。

     

示例输入1:

BARK
BARE
#
  

示例输出1:

Correct
  

示例输入2:

MAKE
BAKE
BONK
BONE
BANE
#
  

示例输出2:

Incorrect

我的代码

#include<stdio.h>
#include<string.h>
int main()
{
  int i,count;
  char a[100],b[100],c[100];
  int flag=1;
  scanf("%s",a);
  do
  {
 scanf("%s",b);
    if(b[0]=='#')
   break;
    if(strlen(a)==strlen(b))
    {  i=0,count=0;
     while(a[i]!='\0')
     {

       if(a[i]!=b[i])
         count++;
         if(count==2)
         {
         flag=0;
         }

       i++;
     }
   }
    else
    {
      flag=0;
    }
    scanf("%s",a);
    if(a[0]=='#')
      break;
   //  scanf("%s",c);
   strcpy(c,a);
   strcpy(a,b);
    strcpy(b,c);

   }
   while(a[0]!='#');
  if(flag==1)
   printf("Correct");
  else
    printf("Incorrect");
   return 0;
   }

此输入的程序输出不正确

  

代码 - &gt; cade - &gt;美食 - &gt;日期 - &gt;数据

1 个答案:

答案 0 :(得分:0)

你读的话太多次了。我的意思是,你读的比你比较多。

检查出来:

  1. 首先scanf()(进入a)并不算数。它曾经有比较的东西
  2. 循环中的第二个scanf()(进入b
  3. 循环中ab的比较
  4. 第三个scanf()(进入a)循环!!
  5. 在2点重复。
  6. 你应该在循环中只有1 scanf()和1个比较。

    你的缩进也会受伤。