向c语言高手求救(有个看不懂的程序)

[复制链接]
查看11 | 回复0 | 2009-1-30 06:28:38 | 显示全部楼层 |阅读模式
#include<stdio.h>int s= 0;void input(int t);int b[20],a[200],n,flag;void main(){        int i,j,m,number,min;        printf("请输入一个数:");        scanf("%d",&number);        flag=0;        if(number<0)        {                flag=1;                number=-number;        }        for(n=0;number!=0 && n<20;n++)        {                a[n]=number%10;                number/=10;        }        for(i=0;i<n-1;i++)        {                min=a;                for(j=i+1;j<n;j++)                {                        if(a>a[j])                        {                                m=a[j];a[j]=a;a=m;                        }                }        }        for(i=0;i<20;i++) b=-1;        if(n) input(0);        printf ("%d",s);        return;}void input(int t){        int i,j;        for(i=0;i<n;i++)        {                if(b==-1)                {                        b=a[t];                        if(t>=n-1)                        {                                if(flag) printf("\\n");                                for(j=0;j<n;j++)                                        printf("%d",b[j]);printf("\\n");                                s=s+1;                        }                        elseinput(t+1);                        b=-1;                }        }        }它的功能是实现一组数的排列,可是小弟看不懂input()函数是怎么回事,特请教各位。告诉我它的思想或算法,将不胜感激!!!

                                                                                                #include<stdio.h>int s= 0;void input(int t);int b[20],a[200],n,flag;void main(){        int i,j,m,number,min;        printf("请输入一个数:");        scanf("%d",&number);        flag=0;        //取绝对值,并将正负保留在flag中        if(number<0)        {                flag=1;                number=-number;        }        //将int分割为字符串,每个字符保存一位数值        for(n=0;number!=0 && n<20;n++)        {                a[n]=number%10;                number/=10;        }        //对字符串中的数值,进行冒泡排序        for(i=0;i<n-1;i++)        {                min=a;                for(j=i+1;j<n;j++)                {                        if(a>a[j])                        {                                m=a[j];a[j]=a;a=m;                        }                }        }        //初始化b        for(i=0;i<20;i++) b=-1;        //如果输入的数不等于0,调用input        //n代表输入数的位数        if(n) input(0);                printf ("%d",s);        return;}//t代表当前处理哪一位,从0开始,由input(t+1)递归,最终等于n-1//t的范围0~n-1void input(int t){        int i,j;        for(i=0;i<n;i++)        {                if(b==-1)                {                        //将a的第t位数据拷贝到b的第i位                        //由于都是从0开始拷贝,实际上,就是复制a的数据到b                        b=a[t];                        if(t>=n-1)                        {                                //当t>=n-1时,代表所有数据拷贝完成                                //根据输入数的正负,输出回车                                if(flag) printf("\\n");                                //打印b内的数据                                for(j=0;j<n;j++)                                        printf("%d ",b[j]);printf("\\n");                                //s从 0 变为 0+1                                s=s+1;                        }                        else                                 input(t+1);                        //递归结束时,逐步将b清空为-1                        b=-1;                }        } }                                       
提问者对答案的评价:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行