当前位置: 代码迷 >> C语言 >> 输出由1,2,3,4组成的所有三位数,三位数间无重复数字.怎么写?
  详细解决方案

输出由1,2,3,4组成的所有三位数,三位数间无重复数字.怎么写?

热度:748   发布时间:2008-03-10 22:01:12.0
输出由1,2,3,4组成的所有三位数,三位数间无重复数字.怎么写?
输出由1,2,3,4组成的所有三位数,三位数间无重复数字.怎么写?
搜索更多相关的解决方案: 位数  数字  输出  

----------------解决方案--------------------------------------------------------
排列组合....用递归做..记得以前有人发过了...你找找看
----------------解决方案--------------------------------------------------------
程序代码:

#include <stdio.h>
int x[10];
int used[10];
int n,k;

void dfs(int d)
{
    if(d==k){
        for(int i=0;i<k;i++){
            printf("%d",x[i]+1);
        }
        printf("\n");
    }
    else {
        for(int i=0;i<n;i++){
            if(!used[i]){
                used[i]=1;
                x[d]=i;
                dfs(d+1);
                used[i]=0;
            }   
        }   
    }        
}   

int main()
{
    n=4;
    k=3;
    dfs(0);
    scanf("%*s");
}

----------------解决方案--------------------------------------------------------
小小代码,不成敬意
/*
我也很菜,不过这个代码却是自己作的,有什么不对的地方,还请大家多多包涵。

WIN-TC测试通过,结果正确。
*/


#include<stdio.h>
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~输入函数*/
int suru()
{
        int a;
        do
        {
                scanf("  %d",&a);
                if(a<0||a>9)
                        printf("您输入字符超出范围,请重新输入:\n");
        }
        while(a<0||a>9);

        return a;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~运算函数*/
void yunsuan(int a[4])
{
        int i,j,k,z,m=1;

        for(i=0;i<4;i++)
                for(j=0;j<4;j++)
                       for(k=0;k<4;k++,m++)
                       {
                               if((a[i]==a[j])||(a[i]==a[k])||(a[j]==a[k]))
                               {
                                         m--;
                                         continue;
                               }
                               z=a[i]*100+a[j]*10+a[k];
                               printf("%4d",z);
                               if(m%5==0)
                                         puts(" ");
                       }
        puts(" ");
        printf("共有%d组数字。\n",m-1);
}

/*##################################主函数*/
int main(void)
{
        int a[4],i;
        char x;
        do
        {
                printf("请输入四个10以下的数字:\n");
                for(i=0;i<4;i++)
                          a[i]=suru();
                yunsuan(a);
                puts(" ");
                printf("您还要继续测试吗?N退出,其它键继续:\n");
                scanf("  %c",&x);
        }
        while(x!='n'&&x!='N');
        printf("谢谢使用!\n");


        getch();
}
----------------解决方案--------------------------------------------------------
#include"stdio.h"
#include"string.h"
void rank(char *,int,int);
void main()
{
    char a[100];
    gets(a);
    rank(a,0,strlen(a));    
}
void rank(char *p,int n,int m)
{   static int i=1;
    if(n==m-1)
    {
        for(int i=0;i<m;i++)
        {
            printf("%c  ",p[i]);
        }
       printf("\n");
    }
    else
    {
        for( int j=n;j<m;j++)
        {  
            char temp=p[n];
            p[n]=p[j];
            p[j]=temp;
             rank(p,n+1,m);
             temp=p[n];
             p[n]=p[j];       
             p[j]=temp;
        }
    }
}
这是我的...谢谢斑竹要不我全排列的递归真忘记了
可是对输入的任何数和字符全排列
本帖最近评分记录

学习需要安静。。海盗要重新来过。。
2008-03-11 02:40:51
iFreeBSD

等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
  得分:0 
// full_Permutation.c

#define  Swap(a,b,c) ( (c) = (a) , (a) = (b) ,(b) = (c) )  
void Perm(int *List , int i , int N) {
         
          int j , temp ;  
          if(i == N) {
             for(j = 0 ; j <= N ; j++)
                 printf("%d " , List[i]) ;
             putchar('\n') ;
           }
           else {
                 for(j = i ; j <=N ; j++) {
                     Swap(List[i] , List[j] , temp) ;
                     Perm(List , i + 1 , N) ;
                     Swap(List[i] , List[j] , temp) ;
                  }
           }
}
本帖最近评分记录
  • lonmaor +4 我很赞同 2008-3-11 11:58

without further ado, let’s get started
2008-03-11 03:54:53
sunkaidong

来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4493
专家分:141
注 册:2006-12-28
  得分:0 
楼上的代码好眼熟..呵呵
----------------解决方案--------------------------------------------------------
# include<iostream.h>
void main()
{
int a,b,c,d;
for(a=1;a<=4;a++){
   for(b=1;b<=4;b++){
      if(b==a)continue;
      for(c=1;c<=4;c++){
        if(c==a||c==b)continue;
        for(d=1;d<=4;d++){
          if(d==a||d==b||d==c)continue;
          cout<<a<<b<<c<<d<<endl;
    }
  }
}
----------------解决方案--------------------------------------------------------
TO 7#
the Code in the book is
<< Fundamentals of data structures in C >>
----------------解决方案--------------------------------------------------------
回复
楼上的程序我怎么运行不了呀,有一处地方错误!它要我们算的是无从复的三位数你求的是无从复的四位数?
----------------解决方案--------------------------------------------------------
  相关解决方案