| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6508 人关注过本帖, 1 人收藏
标题:用1,2,3,4,5,6,7,8,9这9个数,不能重复使用,组成四位数
只看楼主 加入收藏
莫云今次
Rank: 3Rank: 3
来 自:浙江
等 级:论坛游侠
帖 子:385
专家分:166
注 册:2009-3-18
收藏
得分:0 
顶楼上的     学过算法的人跟没学过算法的人,处理问题果然不一样
2009-11-18 13:14
kspliusa
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:98
专家分:178
注 册:2009-9-27
收藏
得分:0 
回复 10楼 中学者
出来的结果感觉好像有问题吧~
2009-11-18 13:29
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
回复 12楼 kspliusa
哪组?

樱花大战,  有爱.
2009-11-18 13:35
棱风柳木
Rank: 2
等 级:论坛游民
帖 子:15
专家分:10
注 册:2009-9-27
收藏
得分:0 
先把我在百度知道上的提问放在这吧,让你们也可以看看其他人的回答
http://zhidao.baidu.com/question/125747074.html?quesup1
2009-11-18 15:41
棱风柳木
Rank: 2
等 级:论坛游民
帖 子:15
专家分:10
注 册:2009-9-27
收藏
得分:0 
回复 10楼 中学者
呵呵 是个不错的算法
2009-11-18 16:38
kspliusa
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:98
专家分:178
注 册:2009-9-27
收藏
得分:0 
回复 12楼 kspliusa
你的结果中有重复的数 例如 1234
你的程序我改了改  

#include <cstdio>
#include <iostream>

using namespace std;
bool isU[9] = {false};

int count_ = 0;

int tmp[4] = {0};

void find( int dep )
{

    if ( dep == 4 ) { //find the fourth
        int h1=0;
        for ( int i = 0;i < 9;++i ){
            if ( isU[i] == true ){
                //printf( "%d", i + 1 );
                tmp[h1++] = i+1;
            }
        }

        //printf( "\n" );

    int temp = 1000*tmp[0]+100*tmp[1]+10*tmp[2]+tmp[3];
    if (1234 == temp)
        cout<<"have"<<endl;

        ++ count_ ;

        return ;
    }

    for ( int i = 0;i < 9;++i ){
        if ( isU[i] == false ){
            isU[i] = true;
            find( dep + 1 );
            isU[i] = false;
        }
    }
}

int main()
{
    find( 0 );
    printf( "\nThe Sum is %d\n", count_ );
    return 0;
}
2009-11-18 16:42
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
已经判过重,怎么会有重复的???

樱花大战,  有爱.
2009-11-18 17:03
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
晕,发现错了...实在杯具...
#include <cstdio>
bool isU[9] = {false};
int p[4] = {0};
int count_ = 0;
void find(int dep,int now)
{
    if(dep==4) { //find the fourth
        for(int i=0;i<4;++i){
            printf("%d",p[i]);
        }
        printf("   ");
        ++ count_ ;
        return ;
     }
     for(int i=0;i<9;++i){
         if(isU[i]==false){
            isU[i] = true;
            p[now] = i+1;
            find(dep+1,now+1);
            isU[i] = false;
          }
     }
}
int main()
{
     find(0,0);
     printf("\nThe Sum is %d\n",count_);
     return 0;
}

樱花大战,  有爱.
2009-11-18 17:28
棱风柳木
Rank: 2
等 级:论坛游民
帖 子:15
专家分:10
注 册:2009-9-27
收藏
得分:0 
回复 10楼 中学者
偶 认真看了下 怎么和我在6楼发的原理差不了多少的?
2009-11-18 18:40
棱风柳木
Rank: 2
等 级:论坛游民
帖 子:15
专家分:10
注 册:2009-9-27
收藏
得分:0 
偶这里有两个算法 一个是字典顺序,一个是旋转法;
字典的如下:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
#define SWAP(x,y){int temp;temp=x;x=y;y=temp;}
void main()
{
    int perm[MAXSIZE];
    int last;
    int n;
    int left,right,i,j;
    char line[100];
    gets(line);
    n=atoi(line);
    for(i=0;i<n;i++)
        perm[i]=i+1;
    for(last=0;last>=0;){
        printf("\n");
        for(i=0;i<n;i++)
            printf("%d ",perm[i]);
        for(last=n-2;last>=0&&perm[last]>perm[last+1];last--);
        for(j=n-1;perm[last]>perm[j];j--);
        SWAP(perm[last],perm[j]);
        for(left=last+1,right=n-1;left<right;left++,right--)
            SWAP(perm[left],perm[right]);
    }
}

旋转如下:
#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 20
#define ROTATE(p){                       \
                  int i,temp;            \
                  temp=perm[p];          \
                  for(i=p-1;i>=0;i--)    \
                      perm[i+1]=perm[i]; \
                  perm[0]=temp;          \
                 }
void main()
{
    int perm[MAXSIZE];
    int position;
    int n;
    int i;
    char line[100];
    printf("\nPermutation by Rotation Method");
    printf("\n==============================");
    printf("\n\nNumber of Elements --> ");
    gets(line);
    n=atoi(line);
    for(i=0;i<n;i++)
        perm[i]=i+1;
    position=n-1;
    while(position!=0){
        printf("\n");
        for(i=0;i<n;i++)
            printf("%d ",perm[i]);
        position=n-1;
        ROTATE(position);
        while(perm[position]==position+1&&position!=0){
            position--;
            ROTATE(position);
        }
    }
}
字典的没写输出提示;将就下吧

我想恳请高手帮我改下使它用在这程序;

这两个程序我是在 c语言名题精选百则(技巧篇)冼镜光编著,这里找到的
2009-11-18 19:37
快速回复:用1,2,3,4,5,6,7,8,9这9个数,不能重复使用,组成四位数
数据加载中...
 
   



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

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