谷歌面试题

本文解析了四个算法挑战题目,包括生成特定整数序列、字符串大小写字母重新排序、利用给定随机数生成器生成新的随机数及计算阶乘末尾0的数量。提供了Java语言的实现代码。

1,正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12

 (1)、设计一个函数void generate(int a,int b,int N ,int * Q)计算Q的前几项。

Java实现:

public static void findNum(int a, int b, int N)
	{
		int i = 1, j = 1;
		while(N > 0)
		{
			if(a * i <= b * j)
			{
				System.out.println(a*i);
				i++;
			}
			else
			{
				System.out.println(b * j);
				j++;
			}
			N--;
		}
	}	

2,有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在答谢字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法 c语言函数原型void proc(char *str) 也可以采用你自己熟悉的语言。

public static void adjustChars(char[] c)
	{
		int i = 0;
		int j = c.length - 1;
		while(i <= j)
		{
			if(c[i] <= 'Z' && c[i] >= 'A')
			{
				char temp = c[i];
				c[i] = c[j];
				c[j] = temp;
				j--;
			}
			else
			{
				i++;
			}
		}
	}

3,给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。

	public static int Random5()
	{
		return (int) (Math.random()*5 + 1);
	}
	
	public static int Random7()
	{
		int a, b;
		a = (Random5() - 1) * 5;
		b = (Random5() - 1);
		if(a + b <= 21)
		{
			return (a + b) % 7 + 1;
		}
		else
		{
			return Random7();
		}
		
	}

4,1024! 末尾有多少个0?

	public static int find0(int a)
	{
		int count = 0;
		for(int i = 5; i <= a; i ++)
		{
			int k = i;
			if(k % 5 == 0)
			{
				while(k >= 5)
				{
					if(k % 5 == 0)
					{
						count++;
						k = k / 5;
					}
					else
					{
						break;
					}
				}
			}
		}
		return count;
	}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值