要求用户输入10个数,每个数只输入一次,求出其中的2个最大值,各位来做做看,看谁的最简单。

解决方案 »

  1.   

    排序?时间复杂度是O(nlog2n)的排序有堆排序 快速排序 二分法排序.再考虑空间复杂度?
      

  2.   

    #include "stdio.h"int main()
    {
        int i, k;
        int max = 0, second_max = 0;
        int num[10];
        for (i = 0; i < 10; i++) {
            scanf("%d", &k);
            num[i] = k;
            if (k > max)
                max = k;
        }
        for (i = 0; i < 10; i++)
            if (num[i] > second_max && num[i] != max)
                second_max = num[i];
        printf("The largest two are: %d, %d", max, second_max);
        system("pause");
    }
      

  3.   

    简单的排序算法就是通过 简单的循环和选择解决的.我随手写个好久没写了...自己编译试下行不^0^
    int a[]={3,4,2,6,5,8,7,9,1,0};
    int temp=0;
    int flag=0;
    for(int i=0;i<10;i++)
    {
     temp=a[i];
     for(int t=i+1;t<10;t++)
     {
       if(temp>a[t])
       {
       }
       else
       {
       temp=a[t];
       flag=t;
       }
          a[flag]=a[i];
          a[i]=temp;
      }
    }
    System.out.println("It's: "+a[0]+" and "+a[1]);
      

  4.   


    import java.io.*;
    public class Bigger { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    long max = -65536L;
    long bigger = -65536L;
    String inputStr = "";
    long inputLong = 0;
    int iter = 0;
    while(iter<5){
    System.out.print("input "+(iter+1)+" num :");
    try{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    inputStr = br.readLine();
    inputLong = Long.parseLong(inputStr);

    if(inputLong >= max){
    bigger = max;
    max = inputLong;
    }
    iter++;

    }catch(Exception e){
    e.printStackTrace();
    }
    }
    if(max==bigger)
    {
    System.out.println("The two value is the same :"+max);
    }
    else{
    System.out.println(max);
    System.out.println(bigger);
    }


    }}java输入比其他语言费事。
      

  5.   

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    public class Bigger {
        public static void main(String[] agrs){
            long max = Long.MIN_VALUE;
            long max2 = Long.MIN_VALUE;
            for(int i = 0; i < 10; i++){
                try{
                    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                    String inputStr = br.readLine();
                    long tmpLong = Long.parseLong(inputStr);
                    
                    if(tmpLong >= max){
                        max2 = max;
                        max = tmpLong;
                    } else if(tmpLong > max2){
                        max2 = tmpLong;
                    }
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
            System.out.println("The biggest one is " + max);
            System.out.println("The one next to biggest is " + max2);
        }
    }略改了下楼上的代码,对最大和次大的判断略有修改。
      

  6.   

    public class Compare
    {
    public static void main(String[] args)
    {
    BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    int max=0;
    int maxer=0;
    for(int i=0;i<10;i++)
    {
    System.out.println("please enter the "+(i+1)+" number:");
    try{

    String s=in.readLine();
    int compare=Integer.parseInt(s);
    if(max<compare)
    {
    max=compare+max;
    compare=max-compare;
    max=max-compare;
    }
    if(maxer<compare)
    {
    maxer=compare+maxer;
    compare=maxer-compare;
    maxer=maxer-compare;
    }
    }catch(NumberFormatException e1){}
    catch (IOException e2){}
    }
    System.out.println("max "+max+"\nmaxer "+maxer);
    }

    }
      

  7.   

    先把前二位数记录
    Min
    Max
    每进一位判断如果小于Min则去掉,大于Min再判断是否大于Max,大于Max则把Max赋值给Min,此数替换Max,否则此数换替Min.
    ------
    -_-
    好像替麻烦,只是想与上面的不同.哈哈
      

  8.   

    这样的话,就可以考虑用tree了.至于tree的时间复杂度就好象是nlogn了吧.貌似,很久没用了.
      

  9.   

    lbt 友情提醒 数字可能是负的 4楼的方法时间复杂度也是N 
      

  10.   

    二个变量s1 s2
    先输入二个数
    把大的给s1,小的给s2
    再输入其余8个数
    每个数与s1 s2比较
    如果sn比s1大
    把sn给s1 s1给s2
    如果sn比s2大就把sn给s2
    否则扔了直接全部输入完毕
    这样是不是得出二个大数了?
    :)
      

  11.   

    #include<iostream.h>
    int main()
    {   int i=0;
        cin>>i;
        if(i>0) //输入的数为整数或大于零
        {
        double Array[i];
        for(int j=0;j<2;j++)
        {
            cout<<"请输入第"<<j+1<<"个数:" ;
            cin>>Array[j];
            cout<<endl;
        }
        double maxest=Array[1]>=Array[0]?Array[1]:Array[0];
        double maxer=Array[1]<=Array[0]?Array[1]:Array[0]; //用Array[0]和Array[1]初使化maxest和maxer
        for(int j=2;j<i;j++)
        {
            double t;
            cout<<"请输入第"<<j+1<<"个数:" ;
            cin>>Array[j];
            if(Array[j]>maxest)
            {
            t=maxest;
            maxest=Array[j];
            maxer=t;
            }
            else if(Array[j]>maxer)
            {
                maxer=Array[j];
            }
            cout<<endl;
        }
        cout<<"maxest="<< maxest<<endl;
        cout<<"maxer="<< maxer<<endl;
        return 0;
        }
        else
        cout<<"比较的数的个数应该大于零或至少为整数!"<<endl;
        return 0;
    }
    好像就是楼上人所说的算法,晕死了
      

  12.   

    to:LUFFY
    你可以把int设置为系统最小的整数,谢谢.JAVA可以直接设置
    其次,只所以调整为nlogn  是看到了13楼的要求...不能有重复输入
    谢谢.
    你个丑男
      

  13.   

    #include "stdio.h"int main()
    {
        int i, k;
        int max = 0, second_max = 0;
        for (i = 0; i < 10; i++) {
            scanf("%d", &k);
            if (k > second_max)
                second_max = k;
            if(second_max > max)
                max = second_max;
        }
        printf("The largest two are: %d, %d", max, second_max);
    }修改4楼的没试过差不多吧
      

  14.   

    import java.util.Scanner;
    public class Compare{
    public static void main(String[] args){
    int max=0;
    int second=0;
    Scanner scanner=new Scanner(System.in);
    int[] arr=new int[10];
    for(int i=0;i<10;i++)
    arr[i]=scanner.nextInt();
    for(int i=0;i<10;i++){
     if(arr[i]>max)
      max=arr[i];
    }
    for(int j=0;j<10;j++){
    if((arr[j]!=max)&&(arr[j]>second))
    second=arr[j];  
    }
    System.out.println("max is: "+max);
    System.out.println("second is: "+second);
    }
    }
    偶是新手,呵呵
      

  15.   

    double[] sz={任意10个数}
    double max1=sz[0],max2=0;
    for(int n=1;n<10;n++){
       if(sz[n]>=max1){
         max2=max1;
         max1=sz[n];
       }
    }
    max1最大,max2第二结束
      

  16.   

    修改 :初始化时 max2=sz[1]