| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1018 人关注过本帖, 1 人收藏
标题:一道关于数组合的题目
只看楼主 加入收藏
LOVE燕
Rank: 2
等 级:论坛游民
帖 子:37
专家分:12
注 册:2012-11-14
结帖率:90.91%
收藏(1)
已结贴  问题点数:30 回复次数:22 
一道关于数组合的题目
用1~9组合成三个三位数。。。并且三个三位数的比值为3:2:1;我的代码如下。
#include "stdio.h"
#include "conio.h"
void main()
{  int i,A,B,C,D,E,F,G,H,J,isum1,isum2,isum3,isum[9]={1,2,3,4,5,6,7,8,9};
    for(i=0;i<=8;i++)
    { A==isum[i]*100;
        for(i=0;i<=8;i++)
        { B==isum[i]*10;
          for(i=0;i<=8;i++)
          { C==isum[i];

            for(i=0;i<=8;i++)
            { D==isum[i]*100;
                for(i=0;i<=8;i++)
                {  E==isum[i]*10;
                    for(i=0;i<=8;i++)
                    { F==isum[i];
                        for(i=0;i<=8;i++)
                        { G==isum[i]*100;
                            for(i=0;i<=8;i++)
                            { H==isum[i]*10;
                                for(i=0;i<=8;i++)
                                { J==isum[i];
                                  isum1=A+B+C;
                                  isum2=E+F+D;
                                  isum3=G+H+J;

                                if(isum1*2==isum2*3&&isum2==2*isum3&&isum1==3*isum3)
                                 printf("%d  %d  %d",isum1,isum2,isum3);
                                }

                            }
                        }
                    }

                }

            }
          }

        }

    }
           getch();

}   
个人技术有限。。。可能做的比较烦琐。。但是我觉得思路没错。。可是我最后得出的结果都是零。。求解是什么原因。。。。
这是我以下的一些警告信息:
警告 noname.c 8: 无效操作代码在 main 函数中
警告 noname.c 8: 可能在'A'定义以前使用了它在 main 函数中
警告 noname.c 10: 无效操作代码在 main 函数中
警告 noname.c 10: 可能在'B'定义以前使用了它在 main 函数中
以此类推下面一样有同样的警告。。求解是什么情况。。
搜索更多相关主题的帖子: include 
2012-11-22 21:27
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:4 
哇靠,九个循环,怎么看啊?
先不看算法正确不,
但是你这样:A==isum[i]*100; 这句是没有用的。你是想A=isum[i]*100;的吧

typedef struct _NODE {
    int nKey;
    bool bUsed;
}NODE, *PNODE;

NODE g_flag[9] =
{
    {1,0},
    {2,0},
    {3,0},
    {4,0},
    {5,0},
    {6,0},
    {7,0},
    {8,0},
    {9,0},
};
void CheckNum(int Num[9])
{
    int Num1 = Num[0] * 100 + Num[1] * 10 + Num[2];
    int Num2 = Num[3] * 100 + Num[4] * 10 + Num[5];
    int Num3 = Num[6] * 100 + Num[7] * 10 + Num[8];

    // Num1 : Num2: Num3 = 3:2:1
    if (Num3 * 2 == Num2 && Num3 * 3 == Num1 ) {
        printf("%d  %d  %d \n", Num1, Num2, Num3);
    }
}

void GetNum(int Num[9], NODE flag[9],int nPos)
{   
    if (nPos > 8) {
        return;
    }

    for (int i = 0; i < 9; i++) {
        if (!flag[i].bUsed) {
            flag[i].bUsed = true;
            Num[nPos] = flag[i].nKey;

            if (nPos == 0) {
                CheckNum(Num);
            }
            else {
                GetNum(Num, flag, nPos - 1);
            }

            flag[i].bUsed = false;
        }
    }
}

int main()
{
    int n[9] = { 0 };
   
    // 主要思想,用九个数字排列组合到n数组,n【0-9】按个划分三个数字划分成一个数字,获取这三个数字,检查是否合法,合法则输出
    GetNum(n, g_flag, 8);
}

运行结果:
C:\Users\yuccn>C:\d\temp\test\Debug\test.exe
576  384  192
819  546  273
981  654  327
657  438  219

C:\Users\yuccn>





[ 本帖最后由 yuccn 于 2012-11-22 22:43 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-11-22 21:50
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:4 
看的蛋疼啊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-22 22:05
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:4 
程序代码:
#include<stdio.h>
int main()
{
    int number1=0;
    int number2=0;
    int i,j,k;
    for(i=1;i<=9;i++)
        for(k=1;k<=9;k++)
            for(j=1;j<=9;j++)
            {
                if(i==3*j&&i==2*k)
                {
                    number1=100*i+10*k+j;
                    printf("%d\n",number1);
                    number2=100*j+10*k+i;
                    printf("%d\n",number2);
                }
     
            }
            return 0;
}
三重即可。 632 或者236 不知道你是啥要求啊

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-22 22:08
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:0 
还有个 123 和321!!!!

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-22 22:12
zxd543
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:内蒙古
等 级:贵宾
威 望:17
帖 子:453
专家分:2351
注 册:2012-4-12
收藏
得分:4 
拒绝暴力

马马虎虎 不吝赐教 我是路过蹭分滴
2012-11-22 22:19
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
#include "conio.h"控制台的头文件,永用不到吧?
A==isum[i]*100;你的这种写法是比较是否相等,貌似应该这样A=isum[i]*100;下面的8个也是。
其他的没细看,但是我认为解这个题得思路就想麻烦了。
3个3位数想要比例是3:2:1,那么这3个数的每一位上的数的比例也一定是3:2:1,只要把1到9范围内的数比例可以达到3:2:1的数组合就行了,(9,6,3),(6,4,2),(3,2,1),只有这3种组合啊


我是新手,打酱油的。。。



认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-22 22:23
youngdavid
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:698
注 册:2012-9-24
收藏
得分:4 
楼主的意思是想穷举赋值并比较是否满足3:2:1,程序把赋值语句”=“很多都写成了判断语句“==”;该程序的另一个问题是几个循环里用的是一个循环变量i,这将会导致最内层循环i=9后跳出循环,并接下来依次跳出外面的八层循环,起不到遍历的效果,解决的办法是定义九个不同的循环变量,代码如下:
程序代码:
#include "stdio.h"
#include "conio.h"
void main()
{  int i1,i2,i3,i4,i5,i6,i7,i8,i9,A,B,C,D,E,F,G,H,J,isum1,isum2,isum3,isum[9]={1,2,3,4,5,6,7,8,9};
    for(i1=0;i1<=8;i1++)
    { A=isum[i1]*100;
        for(i2=0;i2<=8;i2++)
        { B=isum[i2]*10;
          for(i3=0;i3<=8;i3++)
          { C=isum[i3];

            for(i4=0;i4<=8;i4++)
            { D=isum[i4]*100;
                for(i5=0;i5<=8;i5++)
                {  E=isum[i5]*10;
                    for(i6=0;i6<=8;i6++)
                    { F=isum[i6];
                        for(i7=0;i7<=8;i7++)
                        { G=isum[i7]*100;
                            for(i8=0;i8<=8;i8++)
                            { H=isum[i8]*10;
                                for(i9=0;i9<=8;i9++)
                                { J=isum[i9];
                                  isum1=A+B+C;
                                  isum2=E+F+D;
                                  isum3=G+H+J;

                                if(isum1*2==isum2*3&&isum2==2*isum3&&isum1==3*isum3)
                                 printf("%d  %d  %d",isum1,isum2,isum3);
                                }

                            }
                        }
                    }

                }

            }
          }

        }

    }
          getch();

}    

2012-11-22 22:33
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
这个题目可以挪到算法那边去,这个是靠算法多一点,^_^

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-11-22 22:45
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:4 
#include<stdio.h>
int  main()
{
    int t=0,i,j,m=0,k;
    int b[888];
    for( i=1; i<10; i++)
     for( j=1; j<10; j++)
      for( k=1; k<10; k++)
      {if(i==j||j==k||i==k) continue;
      b[m] = i*100+j*10+k;
    // printf("%d ",m);
        m++;
        
      }
for(i=0; i<m; i++)
for(j=i+1; j<m; j++)
for(k=j+1; k<m; k++)
if((b[i]*2==b[j]) && (b[i]*3==b[k]))
printf("%d %d  %d\n",b[i],b[j],b[k]);
return 0;
}

www.qunxingw.wang
2012-11-23 00:19
快速回复:一道关于数组合的题目
数据加载中...
 
   



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

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