TEL:400-8793-956
当前位置:程序、服务器

c程序打印给定输入数字或值的所有可能组合?

提问者: 近期获赞: 浏览人数: 发布时间:2021-01-06 13:08:05

 问:如果用户输入为183,则输出应为183138138813831318381。

 
答:此解决方案一定会对您有所帮助,它将生成给定数字的所有排列而无需重复。实际上,它将在输入数字后进一步生成数字,如果需要所有排列,请删除排序函数调用的注释。在下面的实现中,要做的是将数字分解为单位数字并保存到数组中。在此之后,我们寻找找到值较小的任何元素,然后从上一个索引元素遍历到下一个索引元素。如果在该索引处找到了任何匹配的元素,则将其替换为从索引+1到数组长度在数组上侧具有较大值的元素。将数组的上侧从索引+ 1交换到数组的长度后,必须按递增顺序进行排序。重复此步骤,直到没有任何可能性为止。
 
#include <stdio.h>
 
可能的int(int arr [],int n)
{
        我
        对于(i = n-1; i> 0; i--)
                如果(arr [i]> arr [i-1])
                        返回1;
        返回0;
}
 
void print(int arr [],int n)
{
        我
        对于(i = 0; i <n; i ++)
                printf(“%d”,arr [i]);
 
        printf(“ \ n”);
}
 
void swap(int * a,int * b)
{
    int t = * a;
    * a = * b;
    * b = t;
}
 
 
整数分区(整数arr [],整数低,整数高)
{
    intivot = arr [high];
    int i =(低-1);
    int j;
 
    对于(j =低; j <=高-1; j ++)
    {
 
        如果(arr [j] <=枢轴)
        {
            i ++;
            swap(&arr [i],&arr [j]);
        }
    }
    swap(&arr [i +1],&arr [high]);
    返回(i + 1);
}
 
void quickSort(int arr [],int低,int高)
{
    如果(低<高)
    {
 
        int pi = partition(arr,low,high);
 
 
        quickSort(arr,low,pi-1);
        quickSort(arr,pi + 1,高);
    }
}
 
void nextNumber(int arr [],int n)
{
        int i,j;
        int currentMin = 1000000;
        整数索引
        温度
        对于(i = n-1; i> 0; i--){
                如果(arr [i]> arr [i-1]){
                        对于(j = i; j <n; j ++){
                                如果(arr [i-1] <arr [j] && currentMin> arr [j]){
                                        currentMin = arr [j];
                                        索引= j;
                                }
                        }
                        temp = arr [i-1];
                        arr [i-1] = arr [index];
                        arr [index] = temp;
                        quickSort(arr,i,n-1);
                        打破;
                }
        }
 
        返回;
}
 
int main()
{
        整数
        int tmp;
        int len = 0;
        我
        scanf(“%d”,&num);
 
        tmp = num;
        while(tmp){
                tmp / = 10;
                len ++;
        }
        int arr [len];
        对于(i = len-1; i> = 0; i--){
                arr [i] = num%10;
                num / = 10;
        }
 
 
       // quickSort(arr,0,len-1); //删除此评论以生成所有可能性
 
        while(1){
                打印(arr,len);
                if(possible(arr,len)){
                        nextNumber(arr,len);
                }其他{
                        printf(“没有其他可能性\ n”);
                        打破;
                }
        }
 
        返回0;
}
上一篇: 如何编写将应用程序信息存储在文本文件中的Python程序?
下一篇: 使用Jmeter进行性能测试