zoukankan      html  css  js  c++  java
  • 33-求极差

                      

    #include <iostream>
    #include <cstring>
    #include <cmath>
    #include <cstdio>
    using namespace std;
    int d[105];
    int e[105];
    int x = 0, y = 0;
    
    int min1(int *a, int n){
    	int w1 = 0, w2 = 1;
     	if(a[w1] > a[w2]){      //让a[w1] < a[w2]并保证是数组中最小的两个 
    		int temp = w1;
    		w1 = w2;
    		w2 =temp;
    	}
    	for(int i = 2; i < n; i++){
    //		if(a[i] < a[w1]){
    //			w2 = w1;
    //			w1 = i;
    //		}
    		if(a[i] < a[w1]){
    			w2 = w1;
    			w1 = i;	
    		}
    		else if(a[i] < a[w2]){
    			w2 = i;
    		}
    	}
    	x = w1; y = w2;
    }
    
    int max1(int *a, int n){
    	int w1 = 0, w2 = 1;
     	if(a[w1] < a[w2]){      
    		int temp = w1;
    		w1 = w2;
    		w2 =temp;
    	}
    	for(int i = 2; i < n; i++){
    //		if(a[i] > a[w1]){
    //			w2 = w1;
    //			w1 = i;	  //有漏洞a[i]可能介于a[w1] a[w2]之间;	 
    //		}
    		if(a[i] > a[w1]){
    			w2 = w1;
    			w1 = i;	
    		}
    		else if(a[i] > a[w2]){
    			w2 = i;
    		}
    	}
    	x = w1; y = w2;
    }
    
    int getmax(int *a, int n){
    	while(n > 2){
    		min1(a, n);
    		a[x] = a[x] * a[y] + 1;
    		a[y] = a[n - 1];
    		n--;
    	}
    	return a[0] * a[1] + 1;
    }
    
    int getmin(int *a, int n){
    	while(n > 2){
    		max1(a, n);
    		a[x] = a[x] * a[y] + 1;
    		a[y] = a[n - 1];
    		n--;
    //		cout << "x " << x << " y: " << y << " a[x]: " << a[x] << endl;
    	}
    	return a[0] * a[1] + 1;
    }
    
    int main(){
    	int n;
    	cin >> n;
    	for(int i = 0; i < n; i++){
    	   	cin >> d[i];
    		e[i] = d[i];
    	}
    	int max = 0, min = 0;
    	max = getmax(d, n);
    	min = getmin(e, n);
    //	cout << max << " " << min << endl;
    	cout << abs(max - min);
    	
    	return 0;
    } 
    

      极差 (15分)
                C时间限制:3000 毫秒 |  C内存限制:3000 Kb
    题目内容:

     在黑板上写了N个正整数组成的一个数列,进行如下操作:每次擦去其中的两个数a和b,
    然后在数列中加入一个数a*b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式
    最后得到的数中,最大的为max,最小的为min,则该数列的极差定义为M=max-min.请你编程,
    对于给定的数列,计算极差.

    输入描述

    输入包含多个测试集.每个测试集的第一行N表示正整数序列长度(0<=N<=50000),随后第二行是N个正整数.当N为0时结束.


    输出描述

    每个结果一行.


    输入样例

    3
    3 5 7


    输出样例

    4

  • 相关阅读:
    Silverlight2 控件布局(笔记)
    Silverligth动态控件例子
    Silverlight中的DataGrid绑定数据
    SilverLight学习笔记对象数据绑定
    得到DataGrid的某一行列的值(转载)
    Silverlight数据绑定简单例子
    SilverLight学习笔记XML操作
    SilverLight学习笔记本地(客户端)数据存储
    SilverLight学习笔记WebClient异步请求
    SilverLight学习笔记泛型数据绑定
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7707921.html
Copyright © 2011-2022 走看看