用c语言解决输入一个四位数,求由这四个数字组成的最大数与最小数字之差

如题所述

可以用排序的方法:

#include<stdio.h>
int jx(int *a);//降序排列 得最大值
int sx(int *a);//升序排列 得最小值
int main()
{
    int a[4],i,max,min;
    char c[5];
    printf("输入4位数字:");
    scanf("%s",c);
    for(i=0;i<4;i++)
        a[i]=c[i]-'0';
    max=jx(a);
    min=sx(a);
    printf("四位数%s组成的最大数字%d与最小数字%d的差为:%d",c,max,min,max-min);
    return 0;
}
int jx(int *a)//降序排列 得最大值
{
    int i,j,aSave,num=0;
    for(i=0;i<4;i++)
        for(j=i+1;j<4;j++)
        {
            if(a[i]<a[j])
            {
                aSave=a[i];
                a[i]=a[j];
                a[j]=aSave;
            }
        }
    num=a[0]*1000+a[1]*100+a[2]*10+a[3];
    return num;
}
int sx(int *a)//升序排列 得最小值
{
    int i,j,aSave,num=0;
    for(i=0;i<4;i++)
        for(j=i+1;j<4;j++)
        {
            if(a[i]>a[j])
            {
                aSave=a[i];
                a[i]=a[j];
                a[j]=aSave;
            }
        }
    num=a[0]*1000+a[1]*100+a[2]*10+a[3];
    return num;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-26
#include<stdio.h>

void main()
{
 int t,h[4],max=0,min=0,i=0;
 do{
 scanf("%d",&t);
 if(t<1000||t>9999)
  printf("输入的不是四位数,请重新输入:");
 }while(t<1000||t>9999);
 h[0]=t/1000;  //提取四位数
 h[1]=t%1000/100;
 h[2]=t%100/10;
 h[3]=t%10;
 max=h[0];
 min=h[0];
 for(i=1;i<4;i++)
 {
  if(h[i]<min) //求最小值
   min=h[i];
  if(h[i]>max) //求最大值
   max=h[i];
 }
 printf("%d\n",max-min);
}

 

本回答被网友采纳
第2个回答  2018-03-21
#include "stdio.h"
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[]){
int n,i,j;
char a[5];
printf("Please enter n(int 0<n<10000)...\nn=");
if(scanf("%d",&n)!=1 || n<1 || n>9999){
printf("Input error, exit...\n");
return 0;
}
itoa(n,a,10);
for(i=0;i<4;i++){
for(n=i,j=n+1;j<4;j++)
if(a[n]<a[j])
n=j;
if(n-i)
j=a[n],a[n]=a[i],a[i]=j;
}
i=atoi(a);
j=atoi(strrev(a));
printf("%d(max) - %d(min) = %d\n",i,j,i-j);
return 0;
}

本回答被网友采纳
第3个回答  2018-03-22
#include <stdio.h>
int main()

char num[4];
int i,j=0,a[10]={0},re[4]={0},max5=0,min5=0;
gets(num);
for (i=0;i<4;i++)
{
a[num[i]-'0']++;
}
for (i=0;i<10;i++)
{
while (a[i]!=0)
{
re[j++] = i;
a[i]--;
}
}
max5 = (re[3]*1000) + (re[2]*100) + (re[1]*10) +re[0] ;
min5 = (re[0]*1000) + (re[1]*100) + (re[2]*10) +re[3];
printf("MAX[%d]-MIN[%d] = [%d]\n",max5,min5,max5-min5);
}
1000
MAX[1000]-MIN[1] = [999]
Press any key to continue

1234
MAX[4321]-MIN[1234] = [3087]
Press any key to continue

第4个回答  2018-03-22
#include <stdio.h>

//小到大
void BubbleSort1(int* pData, int count)
{
int temp;
for (int i = 1; i < count; i++)
{
for (int j = count - 1; j >= i; j--)
{
if (pData[j] < pData[j - 1])
{
temp = pData[j - 1];
pData[j - 1] = pData[j];
pData[j] = temp;
}
}
}
}

//大到小
void BubbleSort2(int* pData, int count)
{
int temp;
for (int i = 1; i < count; i++)
{
for (int j = count - 1; j >= i; j--)
{
if (pData[j] > pData[j - 1])
{
temp = pData[j - 1];
pData[j - 1] = pData[j];
pData[j] = temp;
}
}
}
}

int main()
{
int data[4];
for (int i = 0; i < 4; i++)
{
scanf_s("%d", data + i);
}
BubbleSort1(data, 4);
int minNum = data[0] * 1000 + data[1] * 100 + data[2] * 10 + data[3];
BubbleSort2(data, 4);
int maxNum = data[0] * 1000 + data[1] * 100 + data[2] * 10 + data[3];
printf("maxNum=%d minNum=%d maxNum-minNum=%d\n", maxNum, minNum, maxNum - minNum);
return 0;
}