日期:2014-05-20  浏览次数:20663 次

2个面试华为光网测试的有关算法题,没答出来,求解! - Java / 非技术区
总共考了我4个题,前两个比较easy,后面两个小弟我就不会了,求解。
第一题:
        数小孩的题,相信大家可能在学校的时候都作过,我上学的时候老师也讲过,可就是没好好听,一看见这道题的时候那叫一个后悔啊。
        假设n个小孩围成一圈,每次数第m个小孩,该小孩被踢出来,请问当这帮小王八蛋只剩下一个人的时候是第几个人。(比如m=3,第一次数到第3个,第二次从第4个开始往下数,转圈数)写一个方法来实现。

第二题:
        假设有个int型的数n,实现高低位的互换,比如12345,给换成52341,写一个方法实现n的高低位的互换。(n是几不知道)

谢谢大家拉。

------解决方案--------------------
而且华为给我面试的那个人还一脸不屑的跟我说,这个程序很简单,4,5行就能实现,就用简单的数学方法(%)求模实现,考了一上午脑袋都晕了,当时没想出来。虽然面试没过,但还是想知道到底我是怎么死在丫手底下的。
------解决方案--------------------
第二题
#define N 10
#include <stdio.h>
main()
{
int n,i=0,j=0,a[N]={0};
long s=0;
printf( "please input the number: ");
scanf( "%ld ",&s);
do{a[i++]=s%10;}
while((s/=10)!=0);
j=i-1;
i=0;
while(i <=j)s=s*10+a[i++];
printf( "%ld ",s);
getch();
}



------解决方案--------------------
不过有些长

------解决方案--------------------
LS的貌似是C++
------解决方案--------------------
第二题:
public class Test{
public static void main (String args[ ]){
int n=12345;
String s=new String(String.valueOf(n));
char temp=s.charAt(0);
s=s.substring(1,5).concat(String.valueOf(s.charAt(0)));
System.out.println(s);
}
}
------解决方案--------------------
第一题:
#include <stdio.h>
main()
{
int i,k,count,n,num[50],*p;
printf( "Input number of person: n= ");
scanf( "%d ",&n);
p=num;
for(i=0;i <n;i++)
*(p+i)=i+1;
i=0;
k=0;
count=0;
while(count <n-1)
{
if(*(p+i)!=0) k++;
if(k==3)
{ *(p+i)=0;
k=0;
count++;
}
i++;
if(i==n) i=0;
}
while(*p==0) p++;
printf( "The last one is NO.%d\n ",*p);
getch();
}

------解决方案--------------------
还是很长

------解决方案--------------------
真想看一下华为的四五行代码

------解决方案--------------------
一个对象,存有两个属性,一个属性是序列号,一个是是否被剔除标记,然后就不要再说了吧!
------解决方案--------------------
第一题是约瑟夫环的问题,随便一搜就有。第二题,我随便写一个吧,大家继续讨论:


public class Test
{
public static int intSwapEnd(int n)
{
if (n < 0)
{
return -intSwapEnd(-n);
}

if (n < 10)
{
return n;
}

int m = 1;
while (n > m)
{
m *= 10;
}
m /= 10;

return (n%10)*m + (n%m/10)*10 + n/m;

}


public static void main(String args[]) {
System.out.println(intSwapEnd(0));
System.out.println(intSwapEnd(1));
System.out.println(intSwapEnd(12));
System.out.println(intSwapEnd(123));
System.out.println(intSwapEnd(1234));
System.out.println(intSwapEnd(12345));
System.out.println(intSwapEnd(-67890));
}