C语言 有连续n(n<=9)个数字,能组成多少个互不相同且无重复的三位数

有连续n(n<=9)个个位数字,问能组成多少个互不相同且无重复的三位数?都是多少?(OJ系统上提交)
input:
有多组数据,每组数据由两个自然数组成。
第1个是数据的个数,第2个数是起始数字。如4 1,表示从1开始的4个数字,即1 2 3 4,再如3 7表示从7开始的3个数字,即7 8 9。
output:
每个3位数占4位宽度,每行输出10个数,按数据由小到大的顺序输出。并在最后显示出总的个数。
Sample Input
4 1
5 5
2 3

Sample Output
123 124 132 134 142 143 213 214 231 234
241 243 312 314 321 324 341 342 412 413
421 423 431 432
Total of 24 numbers.
567 568 569 576 578 579 586 587 589 596
597 598 657 658 659 675 678 679 685 687
689 695 697 698 756 758 759 765 768 769
785 786 789 795 796 798 856 857 859 865
867 869 875 876 879 895 896 897 956 957
958 965 967 968 975 976 978 985 986 987
Total of 60 numbers.
Total of 0 numbers.

#include<stdio.h>
int n,m;
int count=0;
int d[3];
int dn = 0;
void fun(int a[],int n)
{
    if(dn==2)
    {
        for(int i=0;i<n;i++)
        {
            printf("%-4d",d[0]*100+d[1]*10+a[i]);
            count++;
            if(count%10==0)
                printf("\n");
        }
    }
    else
    {
        for(int i=0;i<n;i++)
        {
            d[dn] = a[i];
            int *aa = (int*)malloc((n-1)*sizeof(int));
            int k=0;
            for(int j=0;j<n;j++)
            {
                if(j!=i)
                    aa[k++] = a[j];
            }
            dn++;
            fun(aa,n-1);
            free(aa);
            dn--;
        }
    }
}
void main(void)
{
    while(scanf("%d%d",&n,&m) !=EOF)
    {
        if(n<0 || m<=0 || m+n>10)
            continue;
        count = 0;
        dn=0;
        int *aa = (int*)malloc(n*sizeof(int));
        for(int i=m;i<=n+m-1;i++)
        {
            aa[i-m] = i;
        }
        fun(aa,n);
        free(aa);
        if(count%10!=0)
            printf("\n");
        printf("Total of %d numbers.\n",count);
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值