| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2609 人关注过本帖
标题:任意四个一位数,最多组成多少个互不相同且无重复的三位数?
只看楼主 加入收藏
a1024204390
Rank: 2
来 自:河南周口郸城
等 级:论坛游民
帖 子:87
专家分:67
注 册:2012-6-27
结帖率:88.89%
收藏
已结贴  问题点数:5 回复次数:8 
任意四个一位数,最多组成多少个互不相同且无重复的三位数?
四个数由键盘输入,共二十四个三位数,我想到用12个for语句,一个语句控制两个三位数,不知道有没有更好的算法呐?手机用户伤不起啊,拜托啦
搜索更多相关主题的帖子: 伤不起 用户 
2012-12-29 17:30
额外覆盖
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:城市猎人
威 望:6
帖 子:1726
专家分:5757
注 册:2012-9-22
收藏
得分:1 
#include<iostream.h>
void main()
{
    int a[4];
    int i,j,k;
    for(i=0;i<4;i++)
        cin>>a[i];
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            for(k=0;k<4;k++)
                if(a[i]!=a[j]&&a[i]!=a[k]&&a[j]!=a[k])
                    cout<<a[i]*100+a[j]*10+a[k]<<endl;
}

我现在所学的一切都是为了游戏!!!为了游戏,加油!加油!努力!
2012-12-29 18:23
ksddah
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:53
专家分:135
注 册:2012-12-11
收藏
得分:1 
网上有个排列组合的算法,你自己加个去除数组重复的函数,应该可以满足要求,参考下吧
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
/*
[color=#0000FF]#define bool char
#define true 1
#define false 0
[/color]*/

//从n个元素的数组a中,取m个元素的组合

bool zuhe(char a[],int n,int m)

{//p[x]=y 取到的第x个元素,是a中的第y个元素

    int index,i,*p;



    p=(int*)malloc(sizeof(int)*m);

    if(p==NULL)

    {

        return false;

    }

    index=0;

    p[index]=0;//取第一个元素

    while(true)

    {

        if(p[index]>=n)

        {//取到底了,回退

            if(index==0)

            {//各种情况取完了,不能再回退了

                break;

            }

            index--;//回退到前一个

            p[index]++;//替换元素

        }

        else if(index==m-1)

        {//取够了,输出

            for(i=0;i<m;i++)

            {

                printf("%c",a[p[i]]);

            }

            printf("\n");

            p[index]++; //替换元素

        }

        else

        {//多取一个元素

            index++;

            p[index]=p[index-1]+1;

        }



    }

    free(p);

    return true;

}

//对n个元素的数组a,进行全排列

bool pailie(char a[],int n)

{//p[x]=y 取到的第x个元素,是a中的第y个元素

    int i,j,temp,*p;



    p=(int*)malloc(sizeof(int)*n);

    if(p==NULL)

    {

        return false;

    }

    for(i=0;i<n;i++)

    {//初始排列

        p[i]=i;

    }

    while(true)

    {//循环m=n!次

        //输出一种排列情况

        for(i=0;i<n;i++)

        {

            printf("%c",a[p[i]]);

        }

        printf("\n");

        //从后向前查找,看有没有后面的数大于前面的数的情况,若有则停在后一个数的位置。

        for(i=n-1;i>0 && p[i]<p[i-1];i--);



        //若没有后面的数大于前面的数的情况,说明已经到了最后一个排列,返回

        if(i==0) break;



        //从后查到i,查找大于p[i - 1]的最小的数,记入j

        for(j=n-1;j>i && p[j]<p[i-1];j--);



        //交换p[i-1]和p[j]

        temp=p[i-1];p[i-1]=p[j];p[j]=temp;



        //倒置p[i]到p[n-1]

        for(i=i,j=n-1;i<j;i++,j--)

        {//交换p[c]和p[d]

            temp=p[i];p[i]=p[j];p[j]=temp;

        }

    }

    free(p);

    return true;

}

int main()

{

    char a[]="ABCD";



    zuhe(a,4,2);//组合

    pailie(a,3);//排列

    return 0;

}

图片附件: 游客没有浏览图片的权限,请 登录注册
2012-12-29 20:17
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:1 

                                         
===========深入<----------------->浅出============
2012-12-29 20:51
神鸡降临
Rank: 2
等 级:论坛游民
帖 子:20
专家分:23
注 册:2012-12-29
收藏
得分:1 
2楼不错
2012-12-29 22:09
a1024204390
Rank: 2
来 自:河南周口郸城
等 级:论坛游民
帖 子:87
专家分:67
注 册:2012-6-27
收藏
得分:0 
回复 2楼 额外覆盖
我才看到函数调用,后面的一窍不通,你那个头文件也不知道什么意思?也没见输入函数

永不言败!never say die!
2012-12-30 00:30
a1024204390
Rank: 2
来 自:河南周口郸城
等 级:论坛游民
帖 子:87
专家分:67
注 册:2012-6-27
收藏
得分:0 
回复 3楼 ksddah
能力有现,晕啦

永不言败!never say die!
2012-12-30 00:37
额外覆盖
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:城市猎人
威 望:6
帖 子:1726
专家分:5757
注 册:2012-9-22
收藏
得分:0 
回复 6楼 a1024204390
#include<stdio.h>
 void main()
 {
     int a[4];
     int i,j,k;
     for(i=0;i<4;i++)
         scanf("%d",&a[i]);
     for(i=0;i<4;i++)
         for(j=0;j<4;j++)
             for(k=0;k<4;k++)
                 if(a[i]!=a[j]&&a[i]!=a[k]&&a[j]!=a[k])
                     printf("%d\n",a[i]*100+a[j]*10+a[k]);
 }
不好意思,我是学c++的,只是常常到c区玩,编程习惯c++的输入输出流了!

我现在所学的一切都是为了游戏!!!为了游戏,加油!加油!努力!
2012-12-30 08:59
额外覆盖
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:城市猎人
威 望:6
帖 子:1726
专家分:5757
注 册:2012-9-22
收藏
得分:0 
回复 5楼 神鸡降临
四楼的才是好东西,学习价值很高啊!我的代码只是适合楼主现在的问题,如果数组规模更大就麻烦了!

我现在所学的一切都是为了游戏!!!为了游戏,加油!加油!努力!
2012-12-30 09:03
快速回复:任意四个一位数,最多组成多少个互不相同且无重复的三位数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017380 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved