首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

2个面试华为光网测试的有关算法题,没答出来,求解!解决方法

2012-01-06 
2个面试华为光网测试的有关算法题,没答出来,求解! - Java / 非技术区总共考了我4个题,前两个比较easy,后面

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));
}


}

[解决办法]
第二题:
public class Test{
public static void main (String args[ ]){
int n=12345;
String s=new String(String.valueOf(n));
System.out.println(new StringBuffer(s).reverse().toString());
}
}
[解决办法]
寒一个楼上的,回帖不看贴的典型。
[解决办法]
楼上的没看清楚题目。

另外字符串不失为一个好方法,但是开销有点大。
[解决办法]
第2题其实只要一个递归就可以了,可以5行的
[解决办法]
第二题答案,^_^
public class test0401
{
public static void main(String args[])
{
int i,j;
int a[]=new int[5];
for(i=0;i <5;i++)
{
int m=1;
int n=12345;
for(j=4-i;j> 0;j--)
{
m=m*10;
}
n=(n/m)%10;
a[i]=n;


}
for(i=0;i <5;i++)
{
int t;
t=a[0];
a[0]=a[4];
a[4]=t;
System.out.println(a[i]);
}




}
}

[解决办法]
第一题

int fun(int n, int m)
{
int i, r = 0;
for (i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}

[解决办法]
第二个:
估计算法部分是行数最少的了吧?!
import java.io.*;
public class Test{
public static void main(String[] args) throws IOException {
int x;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print( "Please input number: ");
x = Integer.parseInt(in.readLine());

x =rotate (x);

System.out.println(x);
}
public static int rotate(int n)
{
if (n < 0)
return -rotate(-n);
else 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;
}
}


[解决办法]
嘿嘿,第二题,,用了笨方法,,,
应该还很多改进的地方
#include <iostream>

using namespace std;

int TenN(int);
int ChangeSeq(int);


int main()
{
cout < < ChangeSeq(1022) < < endl;

system( "pause ");


}


int ChangeSeq(int p)
{
if( p < 0)
{
return -ChangeSeq(-p);
}

int temp = p;
int n = 0;
int val = 0;
int tempLast = p%10;
int tempFirst = 0;

while( (val = p/10) !=0 )
{
p = val;
n++;
}

tempFirst = p%10;

temp = temp - tempLast - TenN(n) * tempFirst + TenN(n) * tempLast + tempFirst;

return temp;

}


int TenN(int n)
{
int temp = 1;
for(int i = 0; i <n; i++)
{
temp = temp * 10;
}
return temp;
}

------解决方案--------------------


哈哈
第二个俺是被要求用递归,算起来真的没几行
[解决办法]
转圈数 不是到最后1个都没了????

[解决办法]
.....呃 最后1个人 他就不停的报数 然后M
哈哈哈 我也被T了`~~

呃 好傻的题~~~
[解决办法]

看后面两题,那题目确实是简单了,,兄弟这么好机会都没把握住啊~~

1;第一题:环型链表,记住编号,通过每次删除链表中一个,动态下标。

2;第二题;每次N-N%(10en)递归
[解决办法]
漏了,,第二题,,递归的时候还要N/10en一次
[解决办法]
第二题:
假设有个int型的数n,实现高低位的互换,比如12345,给换成52341,写一个方法实现n的高低位的互换。(n是几不知道)


这个以前学校时在老谭那本C++的书上老做的~~~
[解决办法]
简单写个第一题的解答吧。第二题就不值得写了。
没有注释,相信LZ能看得懂。


int * children = new int[n];
int pos = 0, count = 0, numberOfTed = 0;
while(pos < n) children[pos++] = 1;
AnsiString sequenceOfTed = "被T的顺序: ";
while(numberOfTed < n)
{
if(++pos > = n) pos = 0;
if(children[pos] == 1) count++;
if(count == m)
{
++numberOfTed;
children[pos] = count = 0;
sequenceOfTed += " " + AnsiString(pos + 1);
}
}
ShowMessage(sequenceOfTed);
delete children;

[解决办法]
拱!!
[解决办法]
第二题,一般不要用递归。
public static void main(String[] args) {
int n = 123456789;
StringBuffer buf = new StringBuffer( " " + n);
System.out.println(buf);
final int length = buf.length();
for (int i = length / 2 - 1; i > = 0; i--) {
char ch = buf.charAt(i);
buf.setCharAt(i, buf.charAt(length - i - 1));
buf.setCharAt(length - i - 1, ch);
}
System.out.println(buf);
}
[解决办法]
第二题
#include <stdio.h>

int main(void)
{
int i=1,j=0;
printf( "\ninput a integer: ");
scanf( "%d ",&i);
while( 0 != i )
{


while(i !=0 )
{
j=j*10+i%10;
i/=10;
}

printf( "result:%d ",j);
j=0;
printf( "\ninput a integer: ");
scanf( "%d ",&i);

}

return 1;
}
[解决办法]
先回答第二题:
public static void main(String[] args){
int s = 123456789;

String strInt = new String(String.valueOf(s));
char first = strInt.charAt(0);
char end = strInt.charAt(strInt.length() - 1);
int answer = Integer.parseInt(String.valueOf(end) + strInt.substring(1,strInt.length() - 1) + String.valueOf(first));
System.out.println( "************* " + answer + "&&&&&&&&&&&&&& ");
}
[解决办法]
约瑟夫环么,挺经典的。
[解决办法]
UP
------解决方案--------------------


好多c++教程里面的例程
[解决办法]
说说第二体

用一个栈
先入栈
在出栈
问题解决了!
so easy
#define MAX 10
int main()
{
/*怎么获得这个序列,就不说了,直接负值了*/
int a[MAX]={0,1,2,3,4,5,6,7,8,9}
for(int i = MAX-1;i> -1;i--)
{
cout < <a[i];
}
cout < <endl;
System( "pause ");

}
[解决办法]
看来算法很重要呀,我要加把劲学呀
[解决办法]
第二题,只要一句话:
int n = 123456789;
int result = Integer.parseInt(new StringBuffer( " " + n).reverse());

result就是你要的值了,仅仅是一句话就OK了!

[解决办法]
以前我参加华为的面试,做过第2道题,我觉得用递归方法来做比较简单,可参考如下代码:

#include <stdio.h>

void reverse(int n) {
if (0 == n) {
return ;
} else {
printf( "%d ", n % 10);
reverse(n / 10);
}
}

int main(int argc, char* argv[])
{
reverse(250600);
return 0;
}
[解决办法]
经典
[解决办法]
个人觉得像这样的面试题应该是考算法,不是考那些库函数把(像上面提到的字符串函数)?
小弟极菜,弱弱问下
[解决办法]
大家看看这段哪里出问题了?我的思路
#include "stdafx.h "
void main()
{
int n=12345;
int *a=&n;
int i=1;
printf( "%d ",n);
while((n/=10)> 0){
*(a+i)=n%10;
printf( "%d ",*(a+i));
i++;
}
int n1=0;
int m=1;
for(int j=i;j> =1;j--)
{
n1+=(*(a+j))*m;
m*=10;
}
printf( "%d ",n1);
scanf( "%d ",&i);
}
[解决办法]
。。。。。。
[解决办法]
int f(int n){
int m = 0;
do{
m*= 10;
m += n%10;
}while((n/=10)!= 0)
return m;
}
[解决办法]
第一题用循环链表,链表: struct Node{ int No;struct Node *link}
while(指针不是指的自己)
{
每遍历2次,删除下一个节点;
然后链表不能断,给接上;
}
[解决办法]
我觉得以后回答这样的贴子,把算法思想写出来就行,别写具体的程序,你自己清楚,别人看着费劲。写个伪代码,大家看得明白,然后觉得可行,自己下去试就行了~
[解决办法]
严重同意楼上的

[解决办法]
楼主如果数据结构和算法学的再好一点点再做这样的问题就轻松加愉快了,别灰心继续努力,其实基础还是非常重要的
[解决办法]
闲着无聊,我也来BT一下……
第一题java或c#:
static int josephRing(int N, int M){
int[] a = new int[N];
int c = 0;
for (int n = N; n > 0;n-- ){
for (int i = 0; i < M; ){
i += (a[c] ^ 1);
c = ++c % N;
}
a[c = (N + c - 1) % N] = 1;
}
return 1 + c;
}
第二题,用Standard ML实现:
fun f(b,0)=b |
f(b,a)=f(b*10+a mod 10,a div 10);
测试:
f(0,12345);
输出:
it=54321

[解决办法]
第二题:(VB代码)
Dim a As String
a = Text1.Text '用来记录值

'显示部分
Text1.Text = Right(a, 1) & Mid(a, 2, Len(Trim(a)) - 2) & Left(a, 1)

[解决办法]
ziyouzai(自由在@多则惑) 好强啊,可以说一下你写这段代码是怎么想的吗?
[解决办法]
第二题;我也写了一个:
public class Job {

private static int reverse(int n){
do{
n = n%10;
}while(n > 10);

return n;
}
public static void main(String[] args) {
int n = 123456;
String out = " ";

while(n != 0){
int r = reverse(n);
n = (n -r)/10;
out += r;
}

System.out.println(out);
}
}
[解决办法]
void convert(int *result, int n){
if(n> =10)
convert(result+1, n/10);
*result = n%10;
}
[解决办法]
递归实现:
void convert(int *result, int n){
if(n> =10)
convert(result+1, n/10);
printf( "%d ", n%10);
}
[解决办法]
递归实现,刚才写的参数错了,应该这样:
void convert(int n){
if(n> =10) convert(n/10);
printf( "%d ", n%10);
}
[解决办法]
def joseph(total,interval):
" " " 计算Joseph问题。total - 总数,interval - 间隔 " " "
li = range(total)
i = 0
temp = 0 #返回结果
interval -= 1 #对间隔进行处理
while len(li) > 0:
i = (i) % len(li)
temp = li[i]
li.remove(li[i])
i = i + interval
print temp

# 调用
if __name__ == "__main__ ":
joseph(8,4)


第一道题的Python 版 ^_^
[解决办法]
这是我写的第2题.
第一题去看下数据结构就行
#include "stdafx.h "
#include <iostream.h>


int main(int argc, char* argv[])
{
int n=12345;

while(n!=0)
{

cout < <n%10;
n=n/10;
}

return 0;

}

[解决办法]
第2题 C解法

对于整数
1. 数字转换为字符串 sprinf(...)。
2. 交换第1位和最后一位的值。
3. strtol转换为数字。
[解决办法]
第1题

构造一个单向循环链表,删节点
[解决办法]
第一题 链表
第二题 模余(%)求各位数,倒置,求最后的结果,至于判断n是几的问题还不会的话,就别工作了,再接着上几年吧。。。。。。
[解决办法]
题目不是:比如12345,给换成52341
怎么看了很多算法 感觉不太符合题目要求啊
难道是我误解了??



[解决办法]
第二题
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n, i, j As Integer
n = Int32.Parse(Me.TextBox1.Text)
While (n - 10) > 0
j = n Mod 10
i = (i + j) * 10


n = n \ 10
End While
i = i + n
Me.Label1.Text = i
End Sub
End Class
[解决办法]
import java.io.*;
public class test2 {
public static void main(String args[]) throws IOException
{ String str= " ";
char c;
System.out.println( "请输入任意数字,以x结尾 ");
BufferedReader br=new BufferedReader( new InputStreamReader(System.in));
do
{
c=(char)br.read();
str+=c;
}while(c!= 'x ');
String str1= " ";
int num=str.length();
for(int i=num-2;i> =0;i--)
str1+=str.charAt(i);
str=str1;
System.out.print(str);


第一个约色夫环的问题,第二个我写了一个,可能不怎么好,你可以做为参考!

}


}

[解决办法]
第一题
int Swap (int n)
{
int low,high,cf ;
low = n % 10 ;
cf = 100 ;
for(int i = 2 ; n/cf> 0 ; i++)
{
high = n / cf ;
cf*=10 ;
}
cf=cf/10 ;
return n + (low*cf+high) - (high*cf+low) ;
}
[解决办法]
是(n - 10) > = 0
[解决办法]
JAVA里int占4个字符位的吗?
[解决办法]
猴子选大王
[解决办法]
给一个第二题的:
public static int swap(int n){
if (n < 0){
return -swap(-n);
}else if ( n < 10){
return n;
}else{
String nStringValue = " " + n;
return Integer.parseInt(nStringValue.substring(nStringValue.length()/2) + nStringValue.substring(0, nStringValue.length()/2));
}
}
[解决办法]
/**
* This class is used to answer the question asked in
* http://community.csdn.net/Expert/topic/5434/5434738.xml?temp=.7625391
*
* @author陈亮
*
*/
class Interview {
/**
* This method is used to solve the No.1 problem
*
* @param numChildren
* the number of children to play this game
* @param startPosition
* from where to start counting
* @param countHowManyToQuit
* how many does one child have to count before one is asked to
* leave
*/
public static void childrenCountAndQuitQueue(int numChildren, int startPosition, int countHowManyToQuit) {
// verify the input
if (numChildren <= 0) {
System.out.println( "Too few children to play this game. ");
return;
}
if (startPosition < 0) {
System.out.println( "Position invalid . ");
return;
}
if (countHowManyToQuit < 1) {
System.out.println( "Counter too small. ");
return;
}
// initialize
int[] children = new int[numChildren];
for (int i = 0; i < numChildren; i++) {
children[i] = i;
}
int childrenLeft = numChildren;
int currentPosition = startPosition;
while (childrenLeft > 0) {
int childToQuitQueue = (currentPosition + countHowManyToQuit - 1) % childrenLeft;
// print the message that a child leaves the queue
System.out.println( "Child No : " + (children[childToQuitQueue] + 1) + " left the queue. ");


// move the elements to get a new circle
System.arraycopy(children, childToQuitQueue + 1, children, childToQuitQueue, childrenLeft - childToQuitQueue - 1);
// get the next position to start with
currentPosition = childToQuitQueue;
// remove one child
childrenLeft--;
}
}
/**
* This method is used to solve the No.2 problem
*
* @param valueToOperate
* @return the value operated
*/
public static int exchangeTheHigherAndLowerBitsOfAnINT(int valueToOperate) {

return 0;
}
}
[解决办法]
schmeichel() ( ) 信誉:100 Blog 2007-4-2 12:30:21 得分: 0

以前我参加华为的面试,做过第2道题,我觉得用递归方法来做比较简单,可参考如下代码:

#include <stdio.h>

void reverse(int n) {
if (0 == n) {
return ;
} else {
printf( "%d ", n % 10);
reverse(n / 10);
}
}

int main(int argc, char* argv[])
{
reverse(250600);
return 0;
}

错了吧!!!!!!

要是把250600换成12345结果是多少?54321??

简单递归是不行的


[解决办法]
都是高手! 我只能看!
[解决办法]
int s = 0;

while ( n ) {
s = s*10 + ( n%10 );
n = n / 10;
}

return s;
[解决办法]
第二题

int TransForm(int n)
{
int i;
for(i=0; i <32; i+=4)
{
if((n> > (28-i))&4 == 0)
continue;
else
{
m = n&4;
n = ((n> > (28-i))&4)|n;
break;
}
}
if(i < 32)
n = m < <(28-i)|n;
return n;
}

void main()
{
scanf( "n = %d\n ", n);
printf( "n = %d\n ",TransForm(n));
}
[解决办法]
用了点时间把2个题目都写出来了,不过如果不让用开发工具,还真是写不出来!
第一题:(觉得利用StringBuffer的reverse是最简单的)
import java.io.*;
public class Porblem2 {
public static void main(String args[]) throws IOException{
System.out.println( "请输入要转换的数据: ");
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader bu=new BufferedReader(in);
String s=bu.readLine();
StringBuffer sb=new StringBuffer(s);
System.out.println(sb.reverse());
}
}
第二题:(感觉有点麻烦,好象java类库中只有LinkedList并没有循环链表)
//节点类
public class Node {
public int data;
public Node next;

public Node(int i){
data=i;
}
}
//循环链表类
public class CirList {
private Node tail;
private Node cur;
public Node head;
public int size;

//创建单向循环链表
public CirList(int n){
tail=new Node(n);
cur=tail;
for(int i=n-1;i> 1;i--){
Node node=new Node(i);
node.next=cur;
cur=node;
}
head=new Node(1);
head.next=cur;
tail.next=head;
size=n;
}

//将要删除的元素放在第一个位置
public void setHeader(int s){
Node temp;
for(int i=1;i <s;i++){
temp=head;
head=head.next;
tail=temp;
}
}

//删除第一个位置的元素
public void delete(){
head=head.next;
tail.next=head;


size--;
}

}

import java.io.*;

public class Josephus {

public static void main(String args[]){
Josephus jsf=new Josephus();
try{
System.out.println( "请输入人数: ");
int n=Integer.valueOf(jsf.getString()).intValue();
System.out.println( "请输入步长: ");
int s=Integer.valueOf(jsf.getString()).intValue();
CirList list=new CirList(n);
while(list.size!=1){
list.setHeader(s);
list.delete();
}
System.out.println(list.head.data);
}catch(IOException e){
System.out.println( "请输入数据 ");
}
}

public String getString() throws IOException{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
return s;
}

}


[解决办法]
上面的程序已经经过测试!
[解决办法]
java版,两个题都写出来了!请各位大侠看看吧!!
public class Job {

public Job(){}

//把一个数翻过来表示
private void job0(){
int n = 123050;
String out = " ";

while(n != 0){
int r = reverse(n);
n = (n -r)/10;
out += r;
}

System.out.println(out);
}

private int reverse(int n){
do{
n = n%10;
}while(n > 10);

return n;
}

/*
*假设n个小孩围成一圈,每次数第m个小孩,该小孩被踢出来,
*请问只剩下一个人的时候是第几个人
*/
private void job1(){
int n = 7;
int m = 4;
int[] a = new int[n];
for(int i = 0; i < a.length; i++){
a[i] = i+1;
System.out.print(a[i] + " ");
}
System.out.print( "\n ");

find(a,m);
}

private void find(int[] a,int m){
int find = 0;
int len = a.length;
while(len > 1){
if((find + m) > len)
find = find + m - len - 1;
else
find = find + m - 1;

System.out.println( "踢出: " + a[find]);

for(int i = find; i < len-1; i++)
a[i] = a[i+1];

len--;

if(find == len) find = 0;
}

System.out.println( "留下: " + a[0]);
}

public static void main(String[] args) {
Job J = new Job();
J.job0();
J.job1();
}
}
[解决办法]
我给个VB的
去掉事件过程定义,变量定义,变量采样,结果打印,关键代码是4行 且是按照楼主说的用取模的方法:
Private Sub Form_Click()
Dim x As Long, t As Long
x = 12345
Do
t = t * 10 + x Mod 10
x = Int(x / 10)
Loop While x > 0
Print t
End Sub
[解决办法]
来两个比较简单点的

int fun_1( int n )
{
int s = 0;

while ( n ) {
s = s*10 + ( n%10 );
n = n / 10;
}

return s;
}

int fun_2(int n, int m)
{
int i, r = 0;

for (i = 2; i <= n; i++) {
r = (r + m) % i;
}

return r+1;
}
[解决办法]
算法问题吧!像华为这样的做底层硬件的公司,个人觉得用C一步步将算法写出来是最合适的。本人很菜,望各位高手见谅!
------解决方案--------------------


学习````
[解决办法]
说说第二题,没有仔细看所有楼上的贴,不过有一点看法,既然是算法面试,用reverse之类的现成方法可能不是考官的本意,还是用算法实现好。其实只要几句:
int i=12345,j;
for(j=0;i!=0;i/=10)j=j*10+i%10;
[解决办法]
#include <iostream>
#include <cstring>

using namespace std;

int main(){
string s= "abcde ";
int i=0,j=s.size()-1,m=j;
while(i <j){
s[i]=s[i]^s[j];
s[j]=s[i]^s[j];
s[i]=s[i]^s[j];
i++;j--;
}
for(int k=0;k <=m;k++){
cout < <s[k];
}
getchar();
}
[解决办法]
第二题:
int i = 1,int n = 92345,result = 0;
while(n> 0)
{
result *= 10;
result += n%10;
n = n/10;
}
printf( "result %d\n ",result);
[解决办法]
学习 !
[解决办法]
The Second question:

int Reverse(int n)
{ int m,x ;
for (x=n%10;n;x=n%10)
{ m=m*10+x;
n=(n-x)/10;
}
retrun m;
}
[解决办法]
代码水平和理解能力果然都是参差不齐。
[解决办法]
第二道题:给你一个性能高的结果:
public static int swap(int n) {
if (n < 0) {
return -swap1(-n);
} else if (n < 10) {
return n;
} else {
int halfLen;
int radix;
int radix1;
if (stringSize(n)%2 == 0){
halfLen = stringSize(n)/2;
radix = sizeTable[halfLen-1]+1;
radix1 = radix;
}else{
halfLen = stringSize(n)/2 + 1;
radix = sizeTable[halfLen-1]+1;
radix1 = sizeTable[halfLen-2]+1;
}
return n/radix + (n%radix)*radix1;
}
}

final static int[] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
99999999, 999999999, Integer.MAX_VALUE };

static int stringSize(int x) {
for (int i = 0;; i++)
if (x <= sizeTable[i])
return i + 1;
}
[解决办法]
两题好象都不难。因为自己写过这个算法。
[解决办法]
public static void main(String args[]){
int i=12345;
String s=i+ " ";
System.out.println(s.substring(s.length()-1)+s.substring(1,s.length()-1) +s.substring(0,1));
}

传说中华为的行代码
[解决办法]
public static void main(String args[]){
int i=12345;
String s=i+ " ";
System.out.println(s.substring(s.length()-1)+s.substring(1,s.length()-1) +s.substring(0,1));
}

传说中华为的5行代码
[解决办法]
第二题:习题解
#define nmax 50
main()
{
int i,k,m,n,num[nmax],*p;
printf( "please input the total of numbers: ");
scanf( "%d ",&n);
p=num;
for(i=0;i <n;i++)
 *(p+i)=i+1;//以1至n为序给每个人编号
 i=0;//为每次循环是计数变量
 k=0;//k为1,2,3报数时的计数变量
 m=0;//m为退出人数
 while((n-m)> 1)//当剩下人数超过1人时


{
  if(*(p+i)!=0) k++;
  if(k==3)
  { *(p+i)=0;
  k=0;
  m++;
  }
i++;
if(i==n) i=0;
}
while(*p==0) p++;
printf( "%d is left\n ",*p);

[解决办法]
xc1074097(小白) ( ) 信誉:100 Blog 2007-4-2 19:02:09 得分: 0



public static void main(String args[]){
int i=12345;
String s=i+ " ";
System.out.println(s.substring(s.length()-1)+s.substring(1,s.length()-1) +s.substring(0,1));
}

传说中华为的行代码



无语中………………
[解决办法]
假设n个小孩围成一圈,每次数第m个小孩,该小孩被踢出来,请问当这帮小王八蛋只剩下一个人的时候是第几个人。(比如m=3,第一次数到第3个,第二次从第4个开始往下数,转圈数)写一个方法来实现。
没有看明白这题..
不明白的地方是这一句话:请问当这帮小王八蛋只剩下一个人的时候是第几个人..
意思是"请问当这帮小王八蛋最后剩下的小孩处在原有队列中第几位?"

[解决办法]
汗~~
怎么看到那么多貌似C++的代码~~~
[解决办法]
第二题
int n = 1234;
int t = 0;
for (; n != 0; n /= 10) {
int r = n % 10;
t = 10 * t + r;
}

t就是结果4321,的确4、5行代码就可以写出来。

[解决办法]
再回来说说我第二题的解法:
public static void main(String[] arg) {
int s[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},m=6;
for(int n=s.length,k=1,i=0;n> 1;i++) {
if(i> =s.length) i=0;
if(k==m && s[i]!=-1) {s[i]=-1; n--;k=1;}
if(s[i]!=-1) k++;
}
for(int i:s)
if(i!=-1) System.out.println(i);
}

[解决办法]
第二题它都说明是int类型那就好办了:

#include "iostream.h "
void main()
{
int input;
cin > > input;
while(input != 0)
{
int temp;
temp = input%10;
input = input/10;
cout < < temp;
}
}
[解决办法]
“珍爱生命,远离华为。”今天刚刚看到的。

[解决办法]
public class Reverse {
public static String a = "liping ";

public static int length;

public static void main(String[] args) {
length = a.length();
rever(0);
}

public static void rever(int n) {
if(n <length){
rever(n+1);
System.out.println(a.charAt(n));
}
}
}
[解决办法]
用递归比较好,
public static String a = "liping ";
public static int length = a.length();
public static void rever(int n) {
if(n <length){
rever(n+1);
System.out.println(a.charAt(n));
}
}
因为程序语言在做递归时,会用堆栈来记录方法调用后的返回地址,rever()每执行一次,会保存System.out.println(a.charAt(n));当不在做rever()时会按照后进先去的顺序执行。我想出考题的人的意图在这里吧。
[解决办法]
用c语言写的
int CalcLeft( int numChildren, int step )
{
vector <int> vChild;
int i = 0;
for( i =0;i < numChildren; i ++ )
vChild.push_back(i);
int index = 0;
while( vChild.sizee() > 1 )
{
index = (index+step-1)%vChild.size();
vChild.remove_at( index )
}


return vChild[0];
}

int Reserve( int src )
{
int dest=0;
while( src > 0 )
{
dest= dest*10 + src%10;
src /= 10;
}
return dest;
}
[解决办法]
第一题是约瑟夫环的问题,网上有很多答案;

第二题,作者要求用求模来实现,楼上没有正解的答案,我把答案贴出来,给大家看看

其实很简单!就是作者说的四五行

int i=12345;

int w=i/10000;
int q=i%10000/1000;
int b=i/100%10;
int s=i%100/10;
int g=i%10;

System.out.println(w+ " "+q+ " "+b+ " "+s+ " "+g);

[解决办法]
看清题目的要求12345要得的是52341, 不是54321.

热点排行