百度校园招聘题之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)链接。
浙公网安备 33010602011771号