| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2028 人关注过本帖, 2 人收藏
标题:一道数字游戏题,找出具有此特性的9位数
只看楼主 加入收藏
取消关键字高亮
vdestroyer
Rank: 2
等 级:论坛游民
帖 子:136
专家分:14
注 册:2009-1-7
收藏
得分:0 
花了不少时间,还是没写对,谁能帮我写一个啊?
或者帮我改一下这个也好


这是我写的错的程序
程序代码:
#include <stdio.h> 
#include <conio.h> 

 
int check(int n[]) 
{ 
    int k; 
    long long sum = 0; 

 
    for(k = 1; k < 10; k++) 
    { 
        sum = sum + n[k]; 
        //printf("%d %d\n",sum, k); 
        //检查能否被整除
        if(sum % k != 0) {return 0;} 
        sum = sum * 10; 
        //printf("%I64d %d\n",sum/10, k); 
    } 
    return 1; 
} 

 
// The answer is: 381654729 
int main (void) 
{ 
    int i, k, m, r, s, tmp; 
    int j = 0; 
    int Count = 1; 
    int v[10] = {100,1,2,3,4,5,6,7,8,9}; // The posistion v[0] will never be used 
    //long long a; 

 
     
    j = 0; 
    for(i = 1; i <= 10; i++) 
    { 
         
        if(v[9-j] > v[8-j]) 
        { 
            if(v[9-j] == 9 && j != 0) 
            { 
                //v[8-j] change place with v[9] 
                tmp = v[8-j]; 
                v[8-j] = v[9]; 
                v[9] = tmp; 
                j = 0; 
            } 
            else 
            { 
                tmp = v[9-j]; 
                v[9-j] = v[8-j]; 
                v[8-j] = tmp; 
                j = 0; 
            } 
             
             
            while((9-j) <= 7) 
            { 
                // bubbelsorting 
                for(r = 1; r < j; r++) 
                { 
                    for(s = j-1; s >= r; s--) 
                    { 
                        if(v[s] < v[s-1]) 
                        { 
                            tmp = v[s-1]; 
                            v[s-1] = v[s]; 
                            v[s] = tmp; 
                        } 
                    } 
                } 
            } 
        } 
        else 
        { 
            j++; 
        } 
     
        if(check(v))  
        { 
            for(k = 1; k < 10; k++) 
            { 
                printf("%d",v[k]); 
            } 
        } 
         
         
         
        for(k = 1; k < 10; k++) 
        { 
            printf("%d",v[k]); 
        } 
        printf("\n\n"); 
         
    } 
    getch(); 
} 
2009-08-15 19:30
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
迥 ,我不是已经给你写好了。。。

生命不熄,战斗不止.
2009-08-15 19:59
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
收藏
得分:0 
回复 11楼 vdestroyer
重新写了一遍,练习一下ls高手所说的回溯剪枝。。。
上次想用回溯法写一遍,结果没成功,把自己都转晕了。

#include <stdio.h>

int num[10]={0};

void putnumber(int n);
int check(int n);
void display();

int main()
{

    putnumber(1);

    return 0;
}

void putnumber(int n)
{
    int i;

    if(n<=9)
    {
        for(i=1;i<=9;i++)
        {
            num[n]=i;
            if(check(n))
            {
                if(n==9)
                    display();
                else
                    putnumber(n+1);
            }
        }
    }
}

int check(int n)
{
    int i,sum=0;

    for(i=1;i<=n;i++)
        sum=10*sum+num[i];

    for(i=1;i<=n-1;i++)
        if(num[n]==num[i])
            return 0;
        else if(sum%n!=0)
            return 0;

    return 1;
}

void display()
{
    int i;
    for(i=1;i<=9;i++)
        printf("%d",num[i]);
    printf("\n");
}

2009-08-15 20:26
ljt0000mf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:104
专家分:157
注 册:2009-7-4
收藏
得分:0 
我KAO,
wxjeacen你那个是什么语言,看不明白呢
2009-08-15 20:55
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
回复 14楼 ljt0000mf

看不懂只能说明你还缺火候。谢谢。

[ 本帖最后由 wxjeacen 于 2009-8-15 22:16 编辑 ]

生命不熄,战斗不止.
2009-08-15 21:00
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
我也没事来写一个。。。

#include <stdio.h>
#include <stdlib.h>
long a[10]={0,1};
int k=1;
 
void sort(long a[])
{
 int i;
 for(i=1;i<k;++i)
    if(a[k]==a[i]) {++a[k];i=0;}
 if(a[k]==10) {a[k]=0;++a[--k];sort(a);}
}
 
int main()
{
 long s=a[1],i;
 for(;!(s%k==0&&k==9);)
    {
     if(s%k==0) {++a[++k];sort(a);}
       else {++a[k];sort(a);}
     for(s=0,i=1;i<=k;++i)
        s=s*10+a[i];
    }
 for(i=1;i<=9;++i)
    printf("%ld",a[i]);
 printf("\n");
 system("pause");
 return 0;
}
2009-08-15 23:00
快速回复:一道数字游戏题,找出具有此特性的9位数
数据加载中...
 
   



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

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