if
(b==0&&a>c)
{
printf("%d%d%d\n",c,b,a);
}
else if
(b==0&&a<c)
{
printf("%d%d%d\n",a,b,c);
}
else if
(c==0&&a>b)
{
printf("%d%d%d\n",b,c,a);
}
else if
(c==0&&a<b)
{
printf("%d%d%d\n",a,c,b);
}
else if
(b==0&&c==0)
{
printf("%d%d%d\n",a,b,c);
}
else if
(a>b&&a>c&&b>c&&b!=0&&c!=0)
{
printf("%d%d%d\n",c,b,a);
}
else if
(a>b&&a>c&&b<c&&b!=0&&c!=0)
{
printf("%d%d%d\n",b,c,a);
}
else if
(b>a&&b>c&&a>c&&b!=0&&c!=0)
{
printf("%d%d%d\n",c,a,b);
}
else if
(b>a&&b>c&&c>a&&b!=0&&c!=0)
{
printf("%d%d%d\n",a,c,b);
}
else if
(c>a&&c>b&&a>b&&b!=0&&c!=0)
{
printf("%d%d%d\n",b,a,c);
}
else if
(c>a&&c>b&&b>a&&b!=0&&c!=0)
{
printf("%d%d%d\n",a,b,c);
}
}
return 0;
}
题主考虑的太复杂了,试试这样写,供参考:
#include<stdio.h>
#define swap(x,y) {x = x + y; y = x - y; x = x - y;}
int f(int n)
{
int n1,n2,n3;
if(n%100 == 0) return n;
n1=n%10;
n2=n/10%10;
n3=n/100;
if(n2>n1)
swap(n1,n2);
if(n3>n1)
swap(n1,n3);
if(n3>n2)
swap(n2,n3);
if(n3==0)
swap(n2,n3);
return n3*100+n2*10+n1;
}
int main()
{
int n,n1;
while(scanf("%d",&n)==1 && n != -1)// -1 结束输入
{
n1 = f(n);
printf("%d\n",n1);
}
return 0;
}
//任意输入一个三位整数,再把它的次序打乱重新组合一个新的三位整数,使其值最小。
#include <stdio.h>
#define N 3
void main()
{
int arr[N],i,j,tmp;
printf("输入三位整数:");
while(1)
{
for(i=0;i<N;i++)
{
scanf("%1d",&arr[i]);
}
//冒泡排序。从小排到大
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{
if(arr[j]>arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
if(arr[0]==0&&arr[1]==0)
{
printf("%d%d%d",arr[2],arr[1],arr[0]);
}
else if(arr[0]==0&&arr[1]!=0)
{
printf("%d%d%d",arr[1],arr[0],arr[2]);
}
else
{
printf("%d%d%d",arr[0],arr[1],arr[2]);
}
printf("\n");
}
}
分离出三个数据,升序排列,如果第一位为零,与最近的非零数交换。