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进行性能测试
城市网站导航:无锡网站建设 徐州企业网站定制 常州网站开发哪家好 苏州网站改版 南通网站开发 连云港网站建设 淮安网站建设公司 盐城网站定制 扬州网站改版公司 镇江网站开发 泰州高端网站制作 宿迁高端网站开发 江阴高端网站开发 宜兴建设网站 新沂建设网站 邳州建设网站 常熟建设网站 张家港网站改版 昆山公司网站开发 太仓高端网站制作 丹阳高端网站制作 句容专业建站 泰兴网站制作公司 合肥网站建设 芜湖网站制作 蚌埠网站建设 淮南网站制作哪家好 马鞍山网站建设 铜陵网站制作公司 安庆网站建设公司 黄山网站制作 滁州网站建设 阜阳网站设计 六安网站建设 亳州网站制作 宣城网站建设 巢湖网站建设哪家好 桐城网站制作 天长网站建设 明光网站建设 全椒网站建设 扬中网站建设公司 城市小程序导航: