"求n个数字中的最大值"的 多种方案,及对多种方案优缺点分析。

如果n是3,输入3个数字,求3个数的最大数:

第一种方案:

利用条件运算符来求解,条件运算符的格式是x?y:z

x是boolean类型表达式,如果x=true,

则整个条件运算符的结果是y的值,否则是z的值。(((a>b)?a:b))就是得到a,b中的最大值。

int a =1,b=2,c=3;

int h=(((a>b)?a:b)<c)?c:(((a>b)?a:b));

System.out.println("最大的数字是"+h);


第二种方案:

int a=1,b=2,c=3;

if (a>b&&a>c)

//&&是短路与(对逻辑与性能上面的提高)左边为false的时候就不再取计算右边。

 {

 System.out.println("最大的数是"+a);

 }

  else if (b>a&&b>c)

  {

  System.out.println("最大的数是"+b);

  }

   else if (c>a&&c>b)

   {

   System.out.println("最大的数是"+c);

   }

第三种方案:

int a=1,b=2,c=3;

      int max=a;

 if(max<b)

 {

    max=b;

     if(max<c)

     {

        max=c;

     }   

 }

  else if(max<c)

   {

        max=c;

        if(max<b)

          {

     max=b;

           }

    }

         System.out.println("最大的数是:"+max);

第四种方法,冒泡排序:

Scanner s = new Scanner(System.in);

//创建一个数组

 int[] a=new int[3];

 System.out.println("请输入3个数字:");

//为数组赋值

for (int i = 0; i < 3; i++)

 {

 a[i]=s.nextInt();

 }

  for (int i = 0; i < a.length-1; i++)

冒泡次数是 a.length-1,注意不是i < a.length.

 {

   for (int j = 0; j < a.length-1-i; j++)//对比的次数

//因为每次冒泡都减少一个对比数,为了减少计算机计算次数再减去i

    {

            if(a[j]>a[j+1])

// 如果a[j]>a[j+1],就前后换位,否则不换位.即把大的数字放到后面。

          {

           int temp=a[j+1];

           a[j+1]=a[j];

           a[j]=temp;//设一个暂存的数值,用于换位

          }

}

System.out.println("最大的数是:"+a[a.length-1]);


如果n=5,第一种方案就要修改:

    int a =1,b=2,c=3;d=4,e=5;

             int h=(((a>b)?a:b)<c)?c:(((a>b)?a:b));

                        int i=(((h>d)?h:d)<e)?e:(((h>d)?h:d));

            System.out.println("最大的数字是"+i);

……

如果n的数值很大呢?一直这样一个个对比,显的相当不智能,冒泡排序与前几个方案对比,显得智能得多,创建数组,把要对比的数赋给数组,再冒泡排序(写好算法),最后打印出想要的结果即可。调理清晰,显然当n的数值较大的时是我们的最佳选择。


总结:

  此时是求3个的数的最大数,前三个方案是优越于第四个冒泡排序的方案,第一种方案代码量最少,能最快速的解决问题,所以这时候我们应选择第一种解决方案,第二和第二种方案次之。第二,第三种方案在求比较少量的数字的最大值的时候,逻辑相对更清晰,但n值较大时,就不是最佳方案了。好比如果是求5个数字,甚至更多的数字的时候,前几种方案的代码书写就会显的很拖沓,冒泡排序的优势就明显了,比如无论是从为数字赋值的便利还是明确清晰的思路,还是既定而成的算法来说,都会是我们更好的选择。

  选了非最佳的方案,也许你能完成任务,但也许是走了非常多的弯路,事倍功半。我们是不是也可以由此看出选择比努力重要呢?答案是肯定的。

时间: 2024-10-14 18:37:50

"求n个数字中的最大值"的 多种方案,及对多种方案优缺点分析。的相关文章

C语言求10个整数中的最大值

我们知道求三个整数的最大值可以先定义三个变量来存放这三个数值,但是如果有十个,一百个,一千个,我们不可能定义那么多变量出来,没有什么意义.怎么解决呢?这个时候我们可以用一个数组来存放我们需要比较的数值,比如十个值,我们就用a[10].美观简洁高效!数据的存放解决了,下来就是比较,先定义一个变量比如:MAX来存放这十个数其中的一个值再一一进行比较就可以了,但为了方便起见,我们通常选择数组的第一个值即a[0]赋值给变量,然后依次和a[1].a[2]....顺序比较.如果MAX小于a[1]则把a[1]

求10 个整数中的最大值

思路: 首先应该将自己要进行判断的数字存入数组中,在额外创建一个临时变量用来储存最大值,从数组中的第一个元素开始和第二个元素进行大小的比较,将较大的那个值存入临时变量中,然后依次进行比较,都次都是将最大的数存入临时变量,直到数组中的元素都比较完成 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 #define NUM 10 5 6 int main() 7 { 8 9 int i = 0; 10 int max = 0; 11 int Ar

提示用户一直输入数字(默认为正整数),当用户输入end的时候显示当前输入数字中的最大值。

string input = ""; int max = 0; while (input != "end") { Console.WriteLine("请输入一个正整数,输入end的时候我们将输入当前的最大值:"); input = Console.ReadLine();//可能输入数字, end,或者乱七八糟的字符串. if (input != "end") { try { int number = Convert.ToIn

求10个整数中的最大值

#include "stdio.h" int main() {  int arr[10];  int i=0;  int max=0;  for (i=0;i<sizeof(arr)/sizeof(arr[0]);i++)  {   scanf("%d",&arr[i]);  }  max=arr[0];  for (i=0;i<sizeof(arr)/sizeof(arr[0]);i++)  {  if(arr[0]<arr[i])  {

C#如何获取XML节点数字中的最大值

string xml = @"<NavList> <List> <Num>3</Num> </List> <List> <Num>65</Num> </List> <List> <Num>24</Num> </List> <List> <Num>44</Num> </List> </Nav

使用Java语言实现,自动生成10个整数(1~100,求出生成数列中的最大值和最小值,不允许使用Arrays类的sort方法

这是考察基本的java基础,没啥难点,直接上代码,最近在准备面试,所以做一些基础的面试题练练手 public class Demo1 { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for(int i=0;i<100;i++){ int num = (int) (Math.random()*100)+1; if(!list.contains(nu

用数组求一位数组中的最大值,最小值和平均分,并求出有多少个数超过平均分

#include<stdio.h> main() { int a=0,b,n,i,j,s[100],max,min,w; scanf("%d",&n); w=0; for(i=0;i<n;i++) scanf("%d",&s[i]); max=s[0]; for(i=1;i<n;i++) if(max<s[i]) max=s[i]; //else {max=s[i+1];min=s[i];}} min=s[0]; for

寻找超大数字中的最大值

1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main() { 5 int n, c=1; 6 cin >> n; 7 string max, temp; 8 cin >> max; 9 for (int i = 2; i <= n; i++) { 10 cin >> temp; 11 if (max.size() < temp.size() || (max.size() ==

Excel中提取最大值的问题

在使用excel的时候,碰到了一个如下的问题 意思是以每个字母为条件,取这个字母下面的数字中的最大值,需要注意一个问题是每个字母下面的数字个数不一定相等,例如d下面有四个数字,可以设置如下公式解决: =MAX(INDIRECT("A" & (MATCH(C1,A:A,0)+1) & ":A" & IFERROR(MATCH(C2,A:A,0)-1,65536))) 但是该公式有个缺点就是两边的字母顺序要一致,否则公式将失效.