这个题目核心算法我觉得是两个,第一个就是将输入的五位整数里的五个数分别提取出来成为单独的数值,其次就是将这五个数进行排序组合为新的五位整数,可以分别写两个子函数来实现这两个功能。
1:提取功能
void extract(int n,int x[])
{
int i;
for(i=0;i<5;i++)
{
x[i]=n%10;
n/=10;
}
}
以数组作为实参和形参,既不需要在传值时另找载体,并且在除留取余以及排序时都非常方便。
2:排序功能
void sort(int x[])
{
int i,j,t;
for(i=0;i<4;i++)
for(j=i;j<5;j++)
if(x[i]<x[j])
{
t=x[i];
x[i]=x[j];
x[j]=t;
}
}
完整代码:
#include<stdio.h>
int main()
{
void part(int,int[]);
void sort(int []);
int i,x[5];
printf("输入一个5位正整数:");
scanf("%d",&i);
if(i>99999||i<10000)
{
printf("输入的不是5位整数.\n");
return 0;
}
extract(i,x);
sort(x);
printf("新的5位整数为:");
for(i=0;i<5;i++)
printf("%d",x[i]);
return 0;
}
void extract(int n,int x[])
{
int i;
for(i=0;i<5;i++)
{
x[i]=n%10;
n/=10;
}
}
void sort(int x[])
{
int i,j,t;
for(i=0;i<4;i++)
for(j=i;j<5;j++)
if(x[i]<x[j])
{
t=x[i];
x[i]=x[j];
x[j]=t;
}
}