精华内容
下载资源
问答
  • 把只包含因子2、3和5的称作丑(Ugly Number)。例如6、8都是丑,但14不是,因为它包含因子7。 习惯上我们把1当做是。 求按从小到大的顺序的N

    题目:

    把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。

    求按从小到大的顺序的第N个丑数。

    思路:某个丑数肯定是前面丑数的2,3,5倍数。只需要从前往后生成即可。1,2,3,4,5,6,8,9,10,12,15,。。。。。。。


    代码:

    public class Solution {
        public int min(int a,int b,int c){
            int min=(a<b)?a:b;
            return (min<c)?min:c;
        }
        public int GetUglyNumber_Solution(int index) {
            //1,2,3,4,5....
            if(index<=0)
                return 0;
            int[] a=new int[index];
            a[0]=1;
            int multi1=0;
            int multi2=0;
            int multi3=0;
            for(int i=1;i<a.length;i++){
                int min=min(a[multi1]*2,a[multi2]*3,a[multi3]*5);
                a[i]=min;
                while(a[multi1]*2<=min)
                    multi1++;
                while(a[multi2]*3<=min)
                    multi2++;
                while(a[multi3]*5<=min)
                    multi3++;
                    
            }
            
            return a[a.length-1];
        }
    }


    展开全文
  • 个数之和等于第三个数

    千次阅读 2013-09-16 16:04:34
    同时,更为值得注意的是这道题是 人人网2014校园招聘的笔试题,下面首先对题目进行描述: 给出一有序数组,另外给出第三个数,问是否能在数组中找到两个数,这两个数之和等于第三个数。 我们首先看到第一句话,...

          这是一个很好的算法题,解法类似于快速排序的整理方法。同时,更为值得注意的是这道题是 人人网2014校园招聘的笔试题,下面首先对题目进行描述:

          给出一个有序数组,另外给出第三个数,问是否能在数组中找到两个数,这两个数之和等于第三个数。

          我们首先看到第一句话,这个数组是有序的,所以,我们可以定义两个指针,一个指向数组的第一个元素,另一个指向应该指向的位置(这个需要看具体的实现和数组给定的值),首先计算两个位置的和是否等于给定的第三个数,如果等于则算法结束,如果大于,则尾指针向头指针方向移动,如果小于,则头指针向尾指针方向移动,当头指针大于等于尾指针时算法结束,没有找到这样的两个数。

          它看起来就好像下面这张图一样:


          下面给出具体的实现:

    #include <stdio.h>
    
    int judge(int *a, int len, int k, int *num1, int *num2);
    
    int main(int argc, char **argv)
    {
    	int test_array[] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
    	int result = -1;
    	int num1, num2;
    	result = judge(test_array, sizeof(test_array) / sizeof(int), 12, &num1, &num2);
    	if(result == 0)
    	{
    		printf("%d\t%d\n", num1, num2);
    	}
    	else if(result == -1)
    	{
    		printf("can't find");
    	}
    	else
    	{
    		printf("error");
    	}
    }
    
    int judge(int *a, int len, int k, int *num1, int *num2)
    {
    	int *low = NULL;
    	int *high = NULL;
    	int i = 0;
    	int result = -1;
    	if(a == NULL || len < 2)
    	{
    		return result;
    	}
    	if(a[0] >= k)
    	{
    		return result;
    	}
    	while(a[i] <= k && i < len)
    	{
    		i++;
    	}
    	low = a;
    	high = a + i - 1;
    	while(low  < high)
    	{
    		*num1 = *low;
    		*num2 = *high;
    		if((*low + *high) == k)
    		{
    			result = 0;
    			break;
    		}
    		else if((*low + *high) > k)
    		{
    			high--;
    		}
    		else if((*low + *high) < k)
    		{
    			low++;
    		}
    	}
    	return result;
    }
    

          这样就以高效的方法得到了结果。

    展开全文
  • 1500

    千次阅读 2016-12-14 16:22:33
    参考《剑指Offer》 题目:我们把只包含因子2、3和5的称作丑(Ugly Number)。...分析常规解法一反应,我们肯定1开始遍历,一直到找到1500为止,如下:bool isUgly(int number) { while (number%2==0

    参考《剑指Offer》

    题目:

    我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。

    分析

    常规解法

    第一反应,我们肯定从1开始遍历,一直到找到第1500个丑数为止,如下:

    bool isUgly(int number)  
    {  
        while (number%2==0)  
            number = number/2;  
        while (number%3==0)  
            number = number/3;  
        while (number%5==0)  
            number = number/5;  
        return (number==1)?true:false;  
    }  
    
    

    高效解法:

    前面算法之所以效率低,是因为不管一个数是不是丑数都遍历了,我们要尝试找一个只需要计算丑数的方法。
    首先,我们再次明确丑数的定义:

    丑数是只包含因子2、3和5的数。

    那么很容易我们就可以想到,位于前面的丑数,定然是后面的丑数的因子。比如2是4、6、30的因子,3是6、15、27、30的因子。
    那么,我们可以通过前面的丑数乘以2、3、5来计算出后面的丑数。
    而我们要解决的最主要的问题就是丑数的排序问题。

    解决方法:每次找出生成的丑数中大于M的最小值。

    首先,我们把已有的丑数都乘以2,找到其中第一个大于M的结果,记作M2。同样的方法乘以3、5,找到的结果记作M3、M5。
    最终找到M2、M3、M5中的最小值,就是新生成的最大的丑数,记作新的M。

    当然,如果每次都需要对丑数从头到尾的乘以和判断效率是很低的,我们可以用一个数T来记录M的下标。
    比如T2,即为M2的下标,在它之前的每一个值乘以2都会小于M,在它之后的每一个值乘以2都会大于M。每次新生成M的时候我们再更新这个T2。
    这样我们每次计算M2(乘以2后第一个大于M的数)的时候,只需要让T2后面的一个数乘以2即可了。
    T3、T5的生成方式一样。
    #代码

    #include<iostream>
    
    using namespace std;
    
    int Min(int n1,int n2,int n3)
    {
        int min=(n1<n2)?n1:n2;
        min=(min<n3)?min:n3;
        return min;
    }
    
    int Solution(int n)
    {
        if(n<=0)
            return 0;
    
        int u[n];
        u[0]=1;//1为第一个丑数
    
        int t2=0;//记录M2的下标
        int t3=0;
        int t5=0;
    
        for(int i=1;i<n;i++)
        {
            while(u[t2]*2<=u[i-1])//查找到新的M2,即乘以2后第一个大于M的数
                t2++;
            while(u[t3]*3<=u[i-1])
                t3++;
            while(u[t5]*5<=u[i-1])
                t5++;
            int min=Min(u[t2]*2,u[t3]*3,u[t5]*5);
            u[i]=min;
        }
    
        return u[n-1];
    }
    
    int main()
    {
        cout<<Solution(1500)<<endl;
    
        return 0;
    }
    
    

    结果

    这里写图片描述

    展开全文
  • 解题思路:选定1,根据丑的定义,可知以后的丑必然是在1的基础上乘以2,乘以3,乘以5,因此可以得出三个,从中选择最小的一添加到list列表中,之后若list中的丑与得出的三个中的...

    题目:

    把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

    解题思路:选定第一个丑数1,根据丑数的定义,可知以后的丑数必然是在1的基础上乘以2,乘以3,乘以5,因此可以得出三个丑数,从中选择最小的一个添加到list列表中,之后若list中的丑数与得出的三个丑数中的一个或两个相等,将对应的下标后移,具体代码如下所示:

    import java.util.ArrayList;

    public class Solution {
        public int GetUglyNumber_Solution(int index) {
            if(index<=0){
                return 0;
            }
            ArrayList<Integer> list=new ArrayList<>();
            list.add(1);
            int t2=0,t3=0,t5=0;//对应的下标
            while(list.size()<index){
                int m2=list.get(t2)*2;
                int m3=list.get(t3)*3;
                int m5=list.get(t5)*5;
                int min=Math.min(m2,Math.min(m3,m5));
                list.add(min);

                //若列表中存在,则对应的得出此丑数的下标后移
                if(min==m2){
                    t2++;
                }
                if(min==m3){
                    t3++;
                }
                if(min==m5){
                    t5++;
                }
            }
            return list.get(list.size()-1);
        }
    }

    展开全文
  • 求丑(判断一整数是否是丑)

    千次阅读 2017-09-28 20:45:49
    习惯上我们把1当作是。 定义一方法判断一整数是否为丑。我的思路:让这个数 a 分别除以, 模以(取模,取余数)2,3,5得到商和余数 如果三个余数都不等于0 ,则该肯定不是丑 如果其中有一余数为0,则...
  • 问题:把只包含质因子2、3和5的称作丑...首先的定义我们知道,一的因子只有2,3,5,那么丑p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一一定由另一乘以2或者乘以3或者乘以5得到,那么我们...
  • 第14周项目一输出20个数,每5换行

    千次阅读 2013-11-28 18:21:34
    * 问题描述:按输入的顺序前往后输出20个数,同时每5元素换一行。 * 程序输出:输出20个数,每5换一行 * 问题分析:运用数组 * 算法设计:略 */ #include #include using namespac
  • 算法中需要注意的是个数的生成,需要特殊处理。下面的程序在VC++.net下面测试...// 参数为这三个数的和(范围是14~19)// 参数用来输出生成的随机数//void GetRandom(int sum, int *num){ int temp;
  • 有15个数按从小到大顺序存放在一数组中,输入一个数,输出一个数,要求用折半查找法找出该是数组中第几个元素的值。如果该不在数组中,则输出“无此”。 #include <stdio.h> #include <stdlib.h>...
  • 第三大的、字符串中的单词、排列硬币

    千次阅读 多人点赞 2021-08-29 15:32:12
    大连棒棰岛 算法是进阶架构师的基础,基础不牢,地动山摇,2021-8-14起开始刷题,目标100天,300道LeetCode算法题,分享是学习的...3、如果有两以上的数字,则取第三大的数字 小编菜解 public static int ...
  • 1、2、3、4、5、6、7、8、9、10、12、14、15、16、18、20、21、24、25、27、……显示前20不起眼的数字。现在给出一简单的数字,请编写一程序来计算这简单数字的因数个数。例如,4是一不起眼的,它有3个...
  • 题目:n数字(0,1,…,n-1)形成一圆圈,数字0开始,每次圆圈中删除m数字(为当前数字本身,为当前数字的下一数字)。当一数字删除后,被删除数字的下一继续删除m数字。求出...
  • 前言前天看到了一道简单的面试题,5数字中找出所有每位数字都不同的三...用三for循环,第一for循环遍历所有的数字,第二循环遍历除了第一数字之外的所有数字,第三个循环遍历除了前两数字之外的所有
  • 找到N

    千次阅读 2016-06-27 09:47:11
    就是只包含因子2,3,5的称作是丑,在这里这种定义我是比较模糊的,所以上网查找了更加浅显的定义,丑就是另一乘以2,3,5以后的结果(1除外,通常认为1是最小的丑)。  通常,最简单的方法肯定...
  • java 求解n

    千次阅读 2016-03-27 21:27:41
    题目:我们把只包含因子2,3和5的数称为丑数(Ugly...习惯上我们把1当作第1数第一种解法:最简单粗暴野蛮也是效率最低的一种解法是:public class Solution { public int GetUglyNumber_Solution(int index) { int
  • 我们把只包含因子2、3和5的称作丑。例如6、8都是丑,但14不是,因为它包含因子7。习惯上我们把1当做是。求按从小到大的顺序的200
  • 第几个元素的值。如果该不在数组中,则输出“无此”。*/ #include <stdio.h> int main() { int a[15]; int i,j,n,mid,flag = 0; printf("请输入15个数:\n"); for(i = 0;i < 15;i...
  •  把这题目中的开始数字改下以便下面的说明,n 数字(1,…,n-1,n)形成一圆圈,数字1 开始每次圆圈中删除 说明与开始数字无关)m 数字(为当前数字本身,为当前数字的下一个数 字...
  • 习题 5.8 有15个数按由大到小的顺序存放在一数组中,输入一个数,要求用折半查找法找出该是数组中第几个元素的值。如果该不在数组中,则打印出“无此”。 代码块: #include &lt;iostream&gt; ...
  • n

    千次阅读 2018-09-16 12:42:59
    N 题目:我们把只包含因子2、3、5的称作丑(UglyNumber)。假设现在求从小到大排序的1500。例如,6、8都是丑,但是14不是丑,因为它还包括素因子7。 解题思路一:暴力枚举法。 1.首先,...
  •  有100个人围成一圈,1开始报,报到14的这人就要退出。  然后其他人重新开始,1报,到14退出。问:最后剩下的是100人中的第几个人? 思路:1.建一集合,把100要放在里面。 2.建一新集合,...
  • 费马四平方猜想指出,任意自然数都可以分解成不超过四完全平方的和。 例如:144 = 122 ,14 = 12 + 22 + 32。 现在给出自然数N(N ≤ 60000),_gXX希望知道N最少可以分解成多少完全平方。 ...
  • n个数中选取m个数的所有组合

    千次阅读 2020-06-04 21:27:04
    n个数1,2,...,n,这n个数中任意选m个数,输出所有不同组合,共有C(n,m)种不同组合。 如n=4,m=2,会产生如下输出: 1 2 1 3 2 3 1 4 2 4 3 4 如n=5,m=3,会产生如下输出: 1 2 3 1 2 4 1 3 4 2 3 4 1...
  • 剑指offer面试题之求n

    千次阅读 2016-03-29 21:58:05
    习惯上我们把1当做是。求按从小到大的顺序的N。 2,想法: 我们先看下丑的定义: 所谓丑,就是不能被2,3,5以外的其他素数整除的。1,2,3,4,5,6,8,9,10,12,15是最前面的11...
  • 例如:11,7,5,11,6,7,4,先拿出11,依次从第数字开始比较,发现11就把对应索引标记,这样一趟比较即可知道11是否重复,那些地方重复;二趟使用7和其后数字依次比较,发现7就标记,当遇到以前比较过的11的位置...
  • 1.N个数中等概率抽取M个数 N样本中等概率抽取M样本(M&amp;amp;lt;N)是常见的需求。现在我们以一数组来模拟样本,看看怎么实现这算法。 最容易想到的方法,肯定就是直接等概率抽取。具体做法如下:...
  • 1、快速找出一数组中的最大二大数。  思路:如果当前元素大于最大 max,则让二大数等于原来的最大 max,再把当前元素的值赋给 max。如果当前的元素大于等于二大数secondMax的值而小于最大max的...
  • import java.util.Scanner; /** * 把只包含因子2、3和5的称作... * 习惯上我们把1当做是。求按从小到大的顺序的N。 * * @author Pengmeiyan * */ public class Chou { public static int G
  • 题目: A、B两人玩猜字游戏,游戏规则如下: A选定一 [1,100]之间的数字背对B写在纸上,然后让B开始猜; 如果B猜的偏小,A会提示B这次猜的偏小; 一旦B某次猜的偏大,A就不再提示,此次之后B猜的...一次猜的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,068,591
精华内容 427,436
关键字:

从14数起第3个数是几