| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2853 人关注过本帖
标题:大家用计算机解决个实际问题吧。
只看楼主 加入收藏
鱼∞鱼
Rank: 2
等 级:论坛游民
帖 子:31
专家分:67
注 册:2012-6-5
收藏
得分:4 
#include <stdio.h>
int main()
{int a,b,c,d,e,b1,b2,d1,d2,e1,e2,e3;
b1=b%10;
b2=b/10;
d1=d%10;
d2=d/10;
e1=e%10;
e2=e/10%10;
e3=e/100;
for(a=1;a<=9;a++)
for(b=12;b<=98;b++)
for(c=1;c<=9;c++)
for(d=12;a<=98;d++)
for(e=123;a<=987;c++)
{if((a*b==c*d==e)&&(a!=b1!=b2!=c!=d1!=d2!=e1!=e2!=e3))
printf("%d,%d,%d,%d,%d",a,b,c,d,e);}}我也编了个  不知道对不对  在下菜鸟  只是尝试下  计算机运行很久 不对的地方请指教  在下不胜感激
2012-06-05 22:00
rjvsky
Rank: 3Rank: 3
来 自:陕西西安
等 级:论坛游侠
帖 子:77
专家分:106
注 册:2012-3-6
收藏
得分:4 
我想用数组解决可是没法完成,代码有问题!!求解啊!!求大神纠正一哈!!
程序代码:
#include <stdio.h>
#include <conio.h>

int jiaoHuan (int *a);//如果不满足条件则交换数组的值
jiaoYan(int *a);//进行判断是否满足条件!!

int jiaoHuan (int *a )
{
    int i,t;
    for (i=0;i<8;i++)
    {
        t=a[i];
        a[i]=a[(i+1)%9];
        a[(i+1)%9]=t;
    }

}
jiaoYan(int *a,int h)
{
    int t,j,i;
    t=a[0]*(a[1]*10+a[2]);
    j=a[8]*(a[6]*10+a[7]);
    if((t==j)&& (t=a[3]*100+a[4]*10+a[5]))
    {
        for (i=0;i<9;i++)
            printf ("%d ",a[i]);
        printf ("%d ",h);
    }
    else
    {
        h=jiaoHuan(a);
        jiaoYan(a);
    }

}
void main (void)
{
    int a[9]={7,2,8,1,9,6,3,4,5},h=0;
    jiaoYan(a);


}


企业需要的人才,是真正可以给他们带来经济效益的人,而不是一大堆没用的证书,看淡证书,强化自己···
2012-06-05 22:27
王最水了
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2012-6-6
收藏
得分:4 
路过。
2012-06-06 00:13
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 18楼 lz1091914999
如果只为了找满足条件的序列的话,我一直觉得从那个三位数下手更好找一些。比如:
程序代码:
#include <stdio.h>

#define ONE(n) (n % 10)
#define TEN(n) (n/10 % 10)
#define HUN(n) (n/100 % 10)

int check(int c, int a1, int a2, int b1, int b2)
{
    int i, aux[10] = {0};

    ++aux[ONE(c)];
    ++aux[TEN(c)];
    ++aux[HUN(c)];
    ++aux[a1];
    ++aux[ONE(a2)];
    ++aux[TEN(a2)];
    ++aux[b1];
    ++aux[ONE(b2)];
    ++aux[TEN(b2)];

    for (i = 1; i <= 9; i++)
        if (aux[i] == 0) return 0;
    return 1;
}

int main(int argc, char *argv[])
{
  int a1, a2, b1, b2, c;

  for (c = 124; c < 1000; c += 2) { // 如我之前所说,这个三位数只能以 2,4,6,8 结尾
      for (a1 = 2; a1 < 9; a1++)
      {
          a2 = c / a1;
          if ( c%a1 != 0 || a2 > 99) continue; // 看看这个数能不能分解成一个一位数乘以一个两位数。

          for (b1 = a1+1; b1 <= 9; b1++) // 如果能,看看是不是还能分解成另一个。
          {
              b2 = c / b1;
              if ( c%b1 != 0 || b2 > 99) continue;

              if (check(c, a1, a2, b1, b2)) { // 之后去查是不是用全了 9 个数字。
                  printf("{%d, %d} %d {%d, %d}\n", a1, a2, c, b1, b2);
                  printf("{%d, %d} %d {%d, %d}\n", b1, b2, c, a1, a2);
              }
          }
      }
      if (c%10 == 8) c+=2; // 跳过以 0 结尾的三位数。
  }

  return 0;
}

即使最后不去查是不是用全了 9 个数字,也只能得到 200 来组结果。说明只检查整除性,就可以筛掉大约一半的三位数。
这个题用手都能算,说明计算量是非常小的。用手算的突破口是,找两组 ?? * ? 形式的式子,使得所得三位数的百位和个位数一致(这利用九九乘法表很容易做到)。
很快你就会发现,都不需要具体乘开,就能筛出大约只有5,7组可能。然后具体一算就发现其实只有 2 组。不过这种找的方式不适宜电脑编程。

另外我想了想,判断从原始序列变换到现在序列至少需要交换几次不比找这个序列省劲。


[ 本帖最后由 pangding 于 2012-6-6 01:53 编辑 ]
2012-06-06 01:52
郑晓旭1
Rank: 1
等 级:新手上路
帖 子:5
专家分:4
注 册:2012-6-6
收藏
得分:4 
这个解决了吗?
2012-06-06 10:10
黎晨阳
Rank: 1
来 自:山东青岛
等 级:新手上路
帖 子:5
专家分:4
注 册:2012-5-30
收藏
得分:4 
这个真有点难!
2012-06-06 10:37
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 

系统催结贴了 看了下 目前还没有一个完整的解决方案 看来搞实际问题还真有点难度。

梅尚程荀
马谭杨奚







                                                       
2012-06-06 17:05
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
看来我的分是送不出去了。

重剑无锋,大巧不工
2012-06-06 19:59
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 27楼 有容就大
个人感觉这个问题也不怎么实际。现实生活中遇到排列的概率都比这个要高几个数量级。
我反正实际编程的时候,遇到的情况都是规模比较大,规划和设计很重要,但几乎用不上什么算法知识。

我一开始的想法编这个题其实不是太合适。我感觉如果我去实现的话,代码得 150-200 行左右。

[ 本帖最后由 pangding 于 2012-6-6 23:00 编辑 ]
2012-06-06 22:58
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这题确实不实际。要是有人有这样的要求,估计旁边的人会对他说:“你有病啊!”

不过,我愿意将这题置顶并送分的原因在于,它以实际的方式描述问题。

很从朋友有这样的疑惑。学C语言,书能看懂,课后题会做。但实际想编点什么的时候却觉得无从下手。再有就是不知道自己所学的知识能用到哪。

这属于问题分析能力训练不足。我想如果将这题换成教科书式的描述,就会有更多的人会做了。

重剑无锋,大巧不工
2012-06-07 08:42
快速回复:大家用计算机解决个实际问题吧。
数据加载中...
 
   



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

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