精华内容
下载资源
问答
  • 函数调用求四个数中最大

    千次阅读 2019-04-19 16:59:51
    思路:定义两个函数,分别用于求出四个数字和两个数字最大值。 程序代码: #include <stdio.h> #include <windows.h> int max4(int i,int j,int k,int l) { int max; max=max2(i,j); max=max2...

     知识点函数的调用

    思路定义两个函数,分别用于求出四个数字和两个数字中的最大值。

    程序代码

    #include <stdio.h>
    #include <windows.h>
    int max4(int i,int j,int k,int l)
    {
    	int max;
    	max=max2(i,j);
    	max=max2(max,k);
    	max=max2(max,l);
    	return max;
    }
    int max2(int x,int y)
    {
    	int t;
    	if(x>y)
    		t=x;
    	else t=y;
    	return t;
    }
    int main()
    {
    	int a,b,c,d;
    	printf("please input four numbers:\n");
    	scanf("%d %d %d %d",&a,&b,&c,&d);
    	printf("max=%d\n",max4(a,b,c,d));
    	system("pause");
    	return 0;
    }

    运行结果

    展开全文
  • 输出四个数最大值与最小值

    千次阅读 2012-10-09 11:39:54
    /* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者: 李洋 ...* 输入描述:输入四个正整数 ...* 问题描述:输入四个正整数,输出最大值与最小值 * 程序输出:最大值与最
    /*   
    
    * Copyright (c) 2012, 烟台大学计算机学院   
    
    * All rights reserved.   
    
    * 作    者:  李洋
    
    * 完成日期:2012 年 10月 09日   
    
    * 版 本 号:v1.0   
    
    * 输入描述:输入四个正整数  
    
    * 问题描述:输入四个正整数,输出最大值与最小值
    
    * 程序输出:最大值与最小值
    
    * 问题分析:略 
    
    * 算法设计:略 
    
    */      
    
    #include <iostream>
    using namespace std;
    int main()
    {
        int a,b,c,d,max,min;
        cout<<"请输入四个数:";
        cin>>a>>b>>c>>d;
        if(a>b)
     { 
           max=a;
           min=b;
     }
      else
     {   
          max=b;
          min=a;
     }
        if(max<c)
     { 
          max=c;
     }
       else if(min>c)
     {
          min=c;
     }
       if(max<d)
     { 
          max=d;
     }
       else if(min>d)
     { 
          min=d;
     }
       cout<<"最大值为:"<<max<<"最小值为:"<<min<<endl;
       return 0;
    }
    


    心得体会:难度进一步加大,特别是else if 的使用,因为还没学到,所以很有成就感....加油吧...迎接挑战

     

    展开全文
  •  Python——无序数组找出和为N的两个(三个四个数) 【问题描述】无序数组找出和为N的两个,例如,nums = [1, 4, 3, 2, 6, 5]找出和为target = 6的序列,答案:[(1, 5), (4, 2)]。 参考博客: 1、...

     

            Python——无序数组中找出和为N的两个数(三个数、四个数)

    【问题描述】无序数组中找出和为N的两个数,例如,nums = [1, 4, 3, 2, 6, 5]中找出和为target = 6的序列,答案:[(1, 5), (4, 2)]。

    参考博客:

    1、一个无序数组中两个数之和等于给定的值sum

    2、Python算法题----在列表中找到和为s的两个数字

    输入:

    nums = [1, 4, 3, 2, 6, 5]

    target = 6

    输出 :

    [(1, 5), (4, 2)]

     

    方法一:暴力——穷举法(O(N^2))

           思想:嵌套循环,外层循环遍历全部列表,内层循环遍历当前元素位置之后的所有元素。内层循环中将两个数字相加,等于target,保存当前结果。需要注意的是同一个元素不能重复使用!

    # 暴力解法——穷举
    def getRes_Enumeration(arr, value):
        len1 = len(arr)
        res = []
        for i in range(len1):
            for j in range(i + 1, len1):
                if arr[i] + arr[j] == value:
                    res.append((arr[i], arr[j]))
        return res
    
    if __name__ == "__main__":
        nums = [int(i) for i in input().split()]
        target = int(input())
        print(getRes_Enumeration(nums, target))

    运行结果:

    小结:这个思想确实简单,很容易想到,可能不具有挑战性!毕竟时间复杂度为O(N^2),那有没有更好的方法呢?答案是肯定的,比如O(NlogN)与O(N)。

     

    方法二:双指针——快速排序思想,O(NlogN)

            思想:来自于快速排序,在一个有序的数组(从小到大)中最左边一定是最小值,最右边是最大值。我们可将最小值与最大值相加与目标值进行比较,如果两数之和大于目标值,我们就让最大值小一点(读取第二个最大值),如果两数之和小于目标值,我们就让最小值大一点(读取第二个最小值),如果两数之和刚好等于目标值,保存最大值,最小值,并且让最大值小一点,最小值大一点。需要注意的是前提条件是数组必须有序!!!

            简化:nums先排序,然后定义两个指针,一个low = 0指向数组头,一个high = len(nums) - 1指向数组的尾,看其和nums[low]+nums[high]是否== target;若==,则查找成功返回;若>sum,则尾指针high--;若<sum,则头指针low++。

             时间复杂度:快排O(NlogN),查找O(N);所以总的时间复杂度为:O(NlogN)。

    # 快速排序思想
    def getRes_QuickSort(nums, target):
        nums = sorted(nums)
        len1 = len(nums)
        res = []
        if len1>= 2:
            low, high = 0, len1-1
            while low < high:
                if nums[low] + nums[high] == target:
                    res.append((nums[low], nums[high]))
                    low += 1
                    high -= 1
                elif nums[low] + nums[high] > target:
                    high -= 1
                else:
                    low += 1
            return res
    
    if __name__ == "__main__":
        nums = [int(i) for i in input().split()]
        target = int(input())
        print(getRes_QuickSort(nums, target))

    运行结果:

           细心的朋友这里会发现,诶,最后的输出结果顺序不对啊,因为我们是对排序后的数组进行查找的,如果想要返回原来的,还需进一步改进。

           需要注意的是,这里的排序算法选择的是时间复杂度为O(NlogN)的,加上查找所花时间O(N),最终为O(NlogN)。肯定有人会想,那我为啥不选择时间复杂度为O(N)的排序算法(如:非比较排序的基数排序、计数排序或桶排序)先排序,再查找呢?这样结果就是O(N)了,效率岂不是更高,哎呀,你真的很聪明!!!但是接下面的方法,并不是这样做的,而是利用哈希表来完成!

     

    方法三:哈希表思想求解,O(N)

            思想:给定一个数,根据hash表查找另一个数只需要O(1)的时间。但需要空间换时间,空间复杂度为O(n);可以用hashMap实现,hashMap<a[i], 次数>。遍历一遍数组,若次数没有存在hashMap中,则将其加入,次数为1;再遍历一遍数组,对每个值nums[i],判断target - nums[i]是否在hashmap中【即对应的value是否==1】;若存在,则查找成功;否则继续遍历下一个。直到遍历完整个数组。

    # 哈希表思想
    def getRes_HashMap(nums, target):
        result = []
        for i, value in enumerate(nums):
            if (target - value) in nums[i+1:]:
                result.append((value, target - value))
        return result
    
    if __name__ == "__main__":
        nums = [int(i) for i in input().split()]
        target = int(input())
        print(getRes_HashMap(nums, target))

    运行结果:

     

    变式:给定一个无序数组,求

    (1)三个数或四个数,甚至N个数之和等于target;

    (2)两个数之差等于target;

    这些都可以采取上面三种方法中的思想进行求解,但是,如果作为面试,后面两种才是面试官想要看到的解法!!!

     

    练习一:剑指offer——和为S的两个数

    输入描述:

            输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

    输出描述:

            对应每个测试案例,输出两个数,小的先输出。

    例如:

    输入(假设无序):

             1 4 3 2 6 5

             6

    输出:[1,5]

    输入:

              1 3 4 6 7 8

               45

    输出:

               []

    # -*- coding:utf-8 -*-
    class Solution:
        def FindNumbersWithSum(self, array, tsum):
            # write code here
            # array = sorted(array)
            len1 = len(array)
            res = []
            myres = []
            if len1>= 2:
                low, high = 0, len1-1
                while low < high:
                    if array[low] + array[high] == tsum:
                        res.append([array[low], array[high]])
                        low += 1
                        high -= 1
                    elif array[low] + array[high] > tsum:
                        high -= 1
                    else:
                        low += 1
                # 求最小的一组数
                lentmp = len(res)
                if lentmp >= 1:
                    tmp = []
                    for i in range(lentmp):
                        tmp.append(res[i][0]*res[i][1])
                    index = tmp.index(min(tmp))
                    myres = res[index]
            return myres

    或者精简版本:

    # -*- coding:utf-8 -*-
    class Solution:
        def FindNumbersWithSum(self, array, tsum):
            # write code here
            res = []
            len1, minM = len(array), 10000000
            if len1 < 2: return res
            for i, value in enumerate(array):
                if (tsum - value) in array[i+1:]:
                    if value*(tsum - value)<minM:
                        minM = value*(tsum - value)
                        res = [value, tsum - value]
            return res

     

    练习二:leetcode中的3sum

    方法一:快速排序的思想,与2sum差不多,就是多了一个外层循环,注意left与right的初始值就行了。Python代码如下:

    def Sum3(arr, target):
        arr.sort()
        len1 = len(arr)
        res = []
        if len1<=2: print(res)
        for i in range(len1 - 1):
            left, right = i + 1, len1 - 1 # 以下思路与2sum中的快速排序思想一样
            while left < right:
                sum = arr[i] + arr[left] + arr[right]
                if sum == target and [arr[i], arr[left], arr[right]] not in res:
                    res.append([arr[i], arr[left], arr[right]])
                    left += 1
                    right -= 1
                elif sum < target:
                    left += 1
                else:
                    right -= 1
        print(res)
    
    if __name__ == '__main__':
        arr = [int(i) for i in input().split()]
        target = int(input())
        Sum3(arr, target)

    运行结果为:

    方法二:哈希表的思想求解

    def Sum3(arr, targe):# 3sum问题
        # arr.sort()
        # arr = list(set(arr))
        res = []
        for i, value1 in enumerate(arr):
            for j, value2 in enumerate(arr[i+1:]):
                if (target - value1 - value2) in arr[i+2:]:
                    minV = min(value1, value2, target - value1 - value2)
                    maxV = max(value1, value2, target - value1 - value2)
                    midV = target - minV - maxV
                    res.append((minV, midV, maxV))
        print(list(set(res)))
    
    if __name__ == '__main__':
        arr = [int(i) for i in input().split()]
        target = int(input())
        Sum3(arr, target)

    运行结果:

     

    练习三:leetcode中的4sum

    解决思路与前面的很相似,还是用两种方法:

    方法一:快速排序思想(先排序 + 双指针)

    def Sum4(arr, target):
        arr.sort()
        len1 = len(arr)
        res = []
        if len1<=3:
            print(res)
    
        for i in range(len1 - 2):
            for j in range(i + 1, len1):
                ss = target - arr[i] - arr[j]
                left, right = j + 1, len1 - 1
                while left<right:
                    sum = arr[left] + arr[right]
                    if sum == ss and [arr[i], arr[j], arr[left], arr[right]] not in res:
                        res.append([arr[i], arr[j], arr[left], arr[right]])
                        left += 1
                        right -= 1
                    elif sum < ss:
                        left += 1
                    else:
                        right -= 1
        print(res)
    
    if __name__ == '__main__':
        arr = [int(i) for i in input().split()]
        target = int(input())
        Sum4(arr, target)

    运行结果:

    方法二:哈希表的思想求解

    # 4sum问题
    def Sum4(arr, target):
        res = []
        for i, value1 in enumerate(arr):
            for j, value2 in enumerate(arr[i + 1:]):
                for k, value3 in enumerate(arr[i + 2:]):
                    if (target - value1 - value2 - value3) in arr[i+3:]:
                        tmp = [value1, value2, value3 ,target - value1 - value2 - value3]
                        tmp.sort()
                        res.append(tuple(tmp))
        res = list(set(res))
        print(res)
    
    if __name__ == '__main__':
        arr = [int(i) for i in input().split()]
        target = int(input())
        Sum4(arr, target)

    运行结果:

     

    展开全文
  • 再解释下什么叫能分解成两两位相乘,例如9999肯定是最大位回文,但是很明显不能分解成两两位相乘的形式,所以不符合要求,像9009,他是回文,而且9009=91*99,所以符合要求。 下面是代码 #include...

    首先说下什么是回文数,就是从左往右看和从右往左看是同一个数,例如1221,4554这些都是回文数,而1234这就不是。

    再解释下什么叫能分解成两个两位数相乘,例如9999肯定是最大的四位回文数,但是很明显不能分解成两个两位数相乘的形式,所以不符合要求,像9009,他是回文数,而且9009=91*99,所以符合要求。

    下面是代码

    #include"iostream"
    
    using namespace std;
    bool JudgePalindrome(int n){
    	int key=n;
    	if(n<1000|n>10000)
    		return false;
    	int sum=0;
    	while(n!=0){				//如果n反过来组成的数还等于n即是回文数 
    		sum=n%10+sum*10;
    		n=n/10;
    	}
    	if(sum==key)
    		return true;
    	return false;
    }
    int main(){
    	int i,j,p=0;
    	for(i=10;i<100;i++)
    		for(j=10;j<100;j++)
    			if(i*j>p&&JudgePalindrome(i*j))
    				p=i*j;
    	cout<<p<<endl;
    	return 0;
    } 


    展开全文
  • C++第7周任务2-四数中最大

    千次阅读 2012-10-11 16:06:52
    项目2:输入4整数,输出其中的最大值。 要求:程序调试成功后,提交漂亮、规范的博文作为报告(参考上一任务的模板自行改造) 项目2扩展一(选做):输入4整数,输出其中的最大值和最小值。 项目2扩展二(选...
  • 个数中寻找最大值的5种方法-C语言实现

    万次阅读 多人点赞 2020-06-01 09:16:38
    老师给了一非常笨拙的方法找三个数中最大值,还让我找其他方法??
  •  先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的(10000最小的),将这个数替换堆顶,并调整结构使之仍然是一最小堆,这样,遍历完后,堆的10000个数就是所需的最大的10000。建堆
  • 再求出列表最小的二个数最大之乘积 products2; 最后比较products1和products2,返回得出较大乘积的三个数。 2、乘积最小的三个数: 先求出列表最小的三个数的乘积 products1; 再求出列表中最大的二个数...
  • 如何在1亿个数中找出最大的100个数(top K问题) ​ 最容易想到的方法是将数据全部排序,然后在排序后的集合进行查找,最快的排序算法的时间复杂度一般为O(nlogn),如快速排序。但是在32位的机器上,每float...
  • 方法一、先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的(10000最小的),将这个数替换堆顶,并调整结构使之仍然是一最小堆,这样,遍历完后,堆的10000个数就是所需的最大的10000。...
  • 这道题的思路是,先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的(10000最小的),将这个数替换堆顶,并调整结构使之仍然是一最小堆,这样,遍历完后,堆的10000个数就是所需的最大的10000。...
  • 求矩阵不同行不同列的两个数最大乘积

    千次阅读 热门讨论 2020-08-14 21:00:39
    n*m的矩阵,求其中不同行并且不同列的两个数最大乘积。 n,m<1000 分析: 首先矩阵不大,1000*1000,一共1000000元素,我先想到了排序,从大到小把所有元素排序,然后选择最大的两。 这两如果...
  • 内存有一长数组,有100W条记录, 每记录为一struct array, sizeof( array ) = 512, 在这struct里有一int型成员变量weight, 现要取得按weight值从大到小排序的前500数组单元(求N里的前K大的) ...
  • 这道题目是坑啊,我上来都没看直接当做之前一篇博文求解矩阵中最大子数组和的问题了,采用动态规划的思想来解决,结果呢,只通过了10%左右,感觉很不可思议,于是重新读题发现不对了,人家说的是三数字的乘积...
  • 四个数比较大小(递归解法)

    万次阅读 2018-03-06 13:03:42
    下面说一下我的解题思路:首先这题目就是简单的最值问题。这问题一般的话有两思路:1、定义一个数为最值,然后与其余的进行比较然后比较,找出最值。 2、对所有的进行排序,然后从排序好的里面就可以...
  • 整数a,b,c,由键盘输入这三个数,求三个数中最大的值。 代码实现: #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; int main() { double x,y,z,i,max; printf("请输入三个数x,y,z\n...
  • 输入四个整数,输出其中的最大

    千次阅读 2012-10-14 09:45:34
    /* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作者:王心垚 ... * 问题描述:输入四个整数,输出其中的最大值。... * 程序输出:“四个整数
  • 因为第五组中最大也只可能是第五大的(前四组的第一个都比它大),同理,第四组的后四个数也是不可能的,第三组的最后三个,第二组的最后两个和第一组的最后一个,这些都可以排除。 排除了这些以后...
  • 分析1:对于给定数组找出其中最大的两个数,很容易想到的就是遍历数组。首先遍历整个数组,找出最大的一元素并记录下该位置;然后分别遍历该位置之前的区间和该位置之后的区间,分别找出这两子区间的最大值,...
  • 1、快速找出一数组最大数、第二大数。  思路:如果当前元素大于最大数 max,则让第二大数等于原来的最大数 max,再把当前元素的值赋给 max。如果当前的元素大于等于第二大数secondMax的值而小于最大数max的...
  • #include using namespace std; int main() { int max(int a,int b,int c);  int a=8,b=-12,c=27;  cout  cout  return 0; } int max(int a,int b,int c) {   if(b>a) a=b; ...
  • Linux最大线程最大进程

    万次阅读 2011-08-04 21:40:15
    查看最大线程: cat /proc/sys/kernel/threads-max ulimit User limits - limit the use of system-wide resources. Syntax  ulimit [-ac
  • 例题:下列给定程序,函数fun的功能是:统计一无符合整数各位数字值为0的个数,通过形参传回主函数,并把该整数各位上最大的数字值作为函数值返回。 例如。若输入无符号整数10080,则数字值为0的个数为3,...
  • Windows 下单机最大TCP连接

    千次阅读 2014-05-20 16:43:18
    在做Socket 编程时,我们经常会要问,单机最多可以建立多少 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接。 Windows 下单机的TCP连接有多参数共同决定,下面一一介绍: 最大TCP连接 ...
  • 重载(在一程序可以定义多名称相同的方法,但是参数的类型和个数必须不同) Java针对同一类: 1、方法名相同 2、方法的参数不同(参数个数或者参数类型) 3、方法的返回值类型不影响重载. 使用重载时,输入的...
  • 输入3个数,求最大值最小值中间值

    千次阅读 2015-08-20 14:32:22
    输入3个数,求最大值最小值中间值 2015.06.26 1、 2、 bool 如果为真,则返回1,如果为假则返回0 3、&& 逻辑与 要求表达式两边同时为真,结果才为真,如果表达式两边有一为假,结果就为假。...
  • 整个过程就像下面有趣的动画: 下面我们先来了解一下Java线程池的参数。 希望看完这篇文章后, 再提起线程池的时候, 你脑海首先出现的, 会是一花瓶 : ) 1线程池的参数意义 Java线程池的构造函数如下: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 683,032
精华内容 273,212
关键字:

下面四个数中最大的是