posts - 3,  comments - 10,  trackbacks - 0
其中题目如下:
  给定一个整数,求出比其大的最小的不重复数字,不重复数字小于100000,不重复数字定义如下:

   任意两个相邻位上的数字均不相等。例如:1212,323,65是不重复数字,122,100,1123为重复数字。

实例:
  输入:99
  输出:101
 
  输入:65
  输出:67

我编的程序如下:
#include <iostream>

using namespace std;

int main()
{
  
int start=99;  //给出的数据,求其不重复数
  int sgnl=1;
  
int shu=-1;
  
int T;
  
int p;   

  
int a[]={-1,-2,-3,-4,-5,-6};
  
for (int i=start;i<100000;i++)
  
{    
    
//  sgnl=-1;
      T=i;
      p
=0;
      
while (T!=0)
      
{
          a[p]
=T%10;
          T
=T/10;
          
if (p>0)
          
{
              
if (a[p-1]==a[p])
              
{
                  sgnl
=0;
                  
break;
              }

          }
//  if (p>0)
          if (T==0)
              
if(sgnl!=0)
          
{
              shu
=i;
              i
=100000;
          }

       p
++;
      }
//while (T!=0)
      for (int y=0;y<6;y++)
      
{
          a[y]
=0-1;
      }

  }
//  for (int i=50;i<60;i++)

  cout
<<shu<<endl;  
  
return 0;
}
      开始的时候我认为上述代码是没有任何问题的,但是当每次运行程序的时候都得不到正确的结果。经过多次的调试,我发现在上述While循环中为sgnl赋值以后,到下面的判断处是,sgnl的值貌似不存在一样。
      然后我对程序做了一点修改,仅仅在for循环的里边加了一条语句:sgnl=-1;也就是上述代码注销的地方,然后再次运行程序,结果无误。
      虽然发现了问题,可是我并处清楚这是问什么,所以贴出来希望各位大虾能够帮忙解答一下。
      小弟不胜感激。
       期待中。
posted on 2011-05-28 13:11 hjl 阅读(2030) 评论(8)  编辑 收藏 引用

FeedBack:
# re: 参加第三届华为杯程序设计大赛遇到的一个小问题,求解示[未登录]
2011-05-28 14:27 | Eric
原因很简单,每次你检测完一个数都需要把sgnl标志重置,如果你吧sgnl换成bool型就会更清晰一些,其实你吧sgnl=-1换成sgnl=1也是可以的,而且这样更加符合你前面初始化sgnl=1的定义。
而且,其实连sgnl,a什么的都可以不需要的,我对你的程序做了些精简:
#include <iostream>
using namespace std;
int main()
{
int start=99; //给出的数据,求其不重复数
int T,cur,last;
for ( int i=start+1;i<100000;i++ ) {
T=i; cur=0; last=-1;
while ( T!=0 ) {
cur=T%10;
T/=10;
if ( cur==last ) {
break;
}
last=cur;
}
if ( T==0 ) {
cout<<i<<endl;
return 0;
}
}
}  回复  更多评论
  
# re: 参加第三届华为杯程序设计大赛遇到的一个小问题,求解示[未登录]
2011-05-28 16:58 | 111
重大的吧!  回复  更多评论
  
# re: 参加第三届华为杯程序设计大赛遇到的一个小问题,求解示
2011-05-28 23:08 | hjl
问题解决了   回复  更多评论
  
# re: 参加第三届华为杯程序设计大赛遇到的一个小问题,求解示
2011-05-29 08:44 | hxg
@Eric
start = 65时,输出是66  回复  更多评论
  
# re: 参加第三届华为杯程序设计大赛遇到的一个小问题,求解示
2011-05-29 11:01 | 付翔
我觉得 你如果写一个函数 判断这个数字是不是 不重复数字
对于给定的 data
从 data 往上 遍历 知道找到不重复的数字  回复  更多评论
  
# re: 参加第三届华为杯程序设计大赛遇到的一个小问题,求解示
2011-05-31 11:43 | qinqing1984
你这个算法,对某些最坏情况的数据,太慢了!  回复  更多评论
  
# re: 参加第三届华为杯程序设计大赛遇到的一个小问题,求解示
2011-05-31 11:44 | qinqing1984
你这个算法,很常规,对于某些数据,最坏情况,太慢了!  回复  更多评论
  
# re: 参加第三届华为杯程序设计大赛遇到的一个小问题,求解示[未登录]
2011-06-12 09:33 | wf
把数字打印到字符数组内,然后依次比较这个字符串相邻位置是否相等。
这样岂不更简单  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年5月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜