| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9074 人关注过本帖
标题:用1,2....9组成三个三位数abc,def,ghi,每个数字恰好使用一次,要求abc:def ...
只看楼主 加入收藏
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:0 
我来玩玩。
程序代码:
#include <stdio.h>

#define N     9
#define START 123
#define END   334

int func(int num_a, int num_d, int num_g);

 
int main(int argc, char *argv[])
{
    int num_a, num_d, num_g;
    
    for(num_a = START; num_a < END; num_a++)
    {
        num_d = num_a << 1;
        num_g = num_a * 3;
        if( func(num_a, num_d, num_g) )
        {
            printf("%d  %d  %d\n", num_a, num_d, num_g);    
        }
    }
    return 0;
}

int func(int num_a, int num_d, int num_g)
{
    int rec[N] = {0};
    int index;
    
    while(1)
    {
        if(!num_a && !num_d && !num_g)
        {
            break;
        }
        else
        {
            rec[num_a%10 - 1]++;
            rec[num_d%10 - 1]++;
            rec[num_g%10 - 1]++;
            num_a /= 10;
            num_d /= 10;
            num_g /= 10; 
        }
    }
    
    for(index = 0; index < N; index++)
    {
        if(rec[index] != 1)
        {
            return 0;
        }
    }
    return 1;
}
2011-06-26 23:42
yezhiyaoni32
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2011-6-26
收藏
得分:1 

#include <stdio.h>
#include <stdlib.h>
int fun(int num, int Dnum, int Tnum )
{
    char str_a[3], str_b[3], str_c[3];
    int i = 0, j = 0, k = 0;
    itoa(num, str_a, 10);
    itoa(Dnum, str_b, 10);
    itoa(Tnum, str_c, 10);


   
    for(i=0; i < 3; i++)
    {
        if(i == 0)
        {
            if(str_a[i]==str_a[i+1] || str_a[i+1] == str_a[i+2] || str_a[i] == str_a[i+2])
            {
                return 0;
                break;
            }
        }
   
        for(j=0; j < 3; j++)
        {
            
            if(i == 0)
            {
                if(str_b[i]==str_b[i+1] || str_b[i+1] == str_b[i+2] || str_b[i] == str_b[i+2])
                {
                    return 0;
                    break;
                }
            }
        
            for(k=0; k < 3; k++)
            {
                if(k == 0)
                {
                    if(str_c[i]==str_c[i+1] || str_c[i+1] == str_c[i+2] || str_c[i] == str_c[i+2])
                    {
                        return 0;
                        break;
                    }
                }
                if( str_a[i] == str_b[j] || str_b[j] == str_c[k]  || str_a[i] == str_c[k] )
                {
                    return 0;
                    break;
                }
               
            }
        }
        
    }
    return 1;
}
int main( int argc, char **argv )
{
    int Min = 123;
    int Max = 329;
    int a = 0;
    while( Min < Max )
    {
        if( a = fun( Min, Min*2, Min*3 ) )
        {
            printf("%d\t%d\t%d\n",Min, Min*2, Min*3);
        }
        Min ++;
    }
   
    return 0;
}
2011-06-26 23:50
hello_jwei
Rank: 2
等 级:论坛游民
帖 子:4
专家分:28
注 册:2011-6-14
收藏
得分:8 
#include <stdio.h>
int func(int a)
{
    int temp, flag[10] = {1};
    for(temp=a%10;a;a/=10,temp=a%10)
        if(flag[temp]++ == 1) return 0;
    return 1;
}
void main()
{
    int base;
    for(base=123; base<345; base++)
        if(func(base*1000000+base*2*1000+base*3)==1)
            printf("%d  %d  %d\n", base, base*2, base*3);   
}

估计这个应该算精简了吧。

[ 本帖最后由 hello_jwei 于 2011-6-27 12:56 编辑 ]
2011-06-27 12:53
豪翔天下
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-3-9
收藏
得分:0 
回复 23楼 hello_jwei
这方法太完美了
2013-05-01 16:40
ZZZSS00
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-4-28
收藏
得分:0 
我个人的方法与上面的,但是感觉太麻烦,就找了一下答案,与大家分享一下.

#include<stdio.h>
void main()
{
    int i,j;
    for(i=123;i<987/3;i++)
    {int p,num,n,a[10]={0};
    for(j=1;j<=3;j++)
    {num=i*j;
    n=num%10;
    a[n]=1;
    n=num/100;
    a[n]=1;
    n=(num-100*n)/10;
    a[n]=1;
    }
    for(p=1;p<10;p++)
        if(a[p]!=1)break;
    if(p==10)
        printf("%d  %d  %d\n",i,i*2,i*3);
    }
}
2014-05-10 17:00
喂丶等等
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-22
收藏
得分:0 
回复 23楼 hello_jwei
没太看懂什么意思,能帮我解释下吗?谢谢啦
2015-12-22 21:48
稷下
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-3-14
收藏
得分:0 
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int f[10];
int main(){
    for(int i=123;i<=345;i++){
        int x=2*i,y=3*i;
        memset(f,0,sizeof(f));   
        f[i/100]=1;f[i%100/10]=1;f[i%10]=1;
        f[x/100]=1;f[x%100/10]=1;f[x%10]=1;
        f[y/100]=1;f[y%100/10]=1;f[y%10]=1;
        int s=0;
        for(int j=1;j<=9;j++) s=s+f[j];
        if(s==9) printf("%d:%d:%d\n",i,x,y);
    }
    return 0;
}
2016-03-14 20:21
洛安然
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-5-12
收藏
得分:0 
2016-05-12 14:19
快速回复:用1,2....9组成三个三位数abc,def,ghi,每个数字恰好使用一次,要求ab ...
数据加载中...
 
   



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

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