用数字造数字(II)
时间: 1ms 内存:128M
描述:
输入一个3位以上的整数,求其中最大的两个数字之和与最小的数字之和之间的差。例如:输入8729,输出8,即(9+8)-(2+7)=8,再如,输入24825,输出9,即(8+5)-(2+2)=9。
输入:
一个3位以上的整数
输出:
最大的两个数字之和与最小的数字之和之间的差
示例输入:
8729
示例输出:
8
提示:
参考答案(内存最优[1092]):
#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]):
#include <iostream>
using namespace std;
int main( )
{
int n,arr[15],num=0;
int i, max1, max2, min1, min2, t;
cin>>n;
while(n>0)
{
arr[num++]=n%10;
n/=10;
}
//找最大和次大
for(i=0; i<num-1; i++) //参照冒泡排序思想,将最大交换到最后
{
if(arr[i]>arr[i+1])
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
}
}
for(i=0; i<num-2; i++) //参照冒泡排序思想,将次大交换到次后
{
if(arr[i]>arr[i+1])
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
}
}
max1=arr[num-1];
max2=arr[num-2];
//找最大和次大
for(i=0; i<num-1; i++) //参照冒泡排序思想,将最小交换到最后
{
if(arr[i]<arr[i+1])
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
}
}
for(i=0; i<num-2; i++) //参照冒泡排序思想,将次小交换到次后
{
if(arr[i]<arr[i+1])
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
}
}
min1=arr[num-1];
min2=arr[num-2];
cout<<max1+max2-min1-min2<<endl;
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。