Problem E: 用数字造数字(II)

来源:互联网 发布:化妆品美工 编辑:程序博客网 时间:2024/06/11 21:52

You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted. 

你不能改变你的过去,但你可以让你的未来变得更美好。一旦时间浪费了,生命就浪费了。

Description

输入一个3位以上的整数,求其中最大的两个数字之和与最小的数字之和之间的差。例如:输入8729,输出8,即(9+8)-(2+7)=8,再如,输入24825,输出9,即(8+5)-(2+2)=9。

Input

一个3位以上的整数

Output

最大的两个数字之和与最小的数字之和之间的差

Sample Input

8729

Sample Output

8

HINT

将分离好的数字存储在数组中,再从数组中找出最大、次大值,以及最小、次小值。最坏的策略,将得到的数组排序后取头尾两个元素。

源代码:

#include <stdio.h>int main(){    int n,a[99],max1,min1,max2,min2,b=0;    scanf("%d",&n);    while(n>0)              //将多位数分离开放在数组里    {        a[b]=n%10;        n/=10;        b++;    }    if(a[0]>a[1])    {        max1=min2=a[0];        max2=min1=a[1];    }    else    {        max1=min2=a[1];        max2=min1=a[0];    }    for(int i=2;i<b;i++)//循环判断最大最小值    {                        //同时找出第二大第二小的数        if(max1<=a[i])        {            max2=max1;            max1=a[i];        }        else if(a[i]<max1&&a[i]>max2)        {            max2=a[i];        }        if(min1>=a[i])        {            min2=min1;            min1=a[i];        }        else if(a[i]>min1&&a[i]<min2)        {            min2=a[i];        }    }    printf("%d",(max1+max2)-(min1+min2));    return 0;}


0 0