百度校园招聘题之gcc与gdb应用

百度2014年有道题是这样的:给定任意一个正整数,求比这个数大且最小的“不重复数”,其中不重复数是指相邻的两位不相同。

例如:输入198,输出应该是201.

这道题实现的思想可以用数值来形象的说明,例如我们输入的为19983274,首先,我们对其加一,则输入变成了19983275。第一步比较最高两位,看其是否是重复数,若是重复,加一,后面的数变为010101.。。再判断二三位看是否是重复数。主要的判断步骤为:

首先看最高位19,并非是重复数,换到下一位99,为重复数,加一,变为200,再重复判断,变成201.后面的则为010101即可。

有两种思路,一种是通过数据将数据储存到数组中,从高到地位依次判断是否是重复数。还有一种是通过递归的方法,例如要求1999,则先求199的最小不重复数,然后后面加0,再判断后两位是否是重复的。第二种相对于第一种实现是代码要少写,套用的只有一个函数,故在此采用第二种方法。代码如下:

 1 #include<stdio.h>
 2  int minrep(int n);
 3 
 4  int main()
 5  { int a;
 6    printf("please insert number \n");
 7    scanf("%d",&a);
 8    a=a+1;
 9    printf("the minrep number is %d\n",minrep(a));
10  }
11 
12  int minrep(int n)
13  {int t;
14   if(n<10)
15    return n;
16   if(n/10<(t=minrep(n/10))) /*判断是否发生了变化*/
17    n=t*10;
18   if(n%10==n/10%10)  /*判断后两位是否是重复数*/
19    return minrep(n+1);
20   return n;
21 }

测试结果正确。

下面主要讲解下gcc和gdb的知识,不知到为什么,当写入gcc -o -g时会发生错误,只有当写为gcc -g -o才能正常调试。gcc的处理步骤为:1)预处理,2)编译,3)汇编,4)链接。

posted @ 2013-10-11 17:57  Jerry-c  阅读(156)  评论(0)    收藏  举报