| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1143 人关注过本帖
标题:看看这个题目的算法
只看楼主 加入收藏
hottaro
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-11-24
收藏
 问题点数:0 回复次数:13 
看看这个题目的算法
问题如下:1A+2B+3C+4D+5E+6F+7G=X
其中X为已知量,A至G为未知量,取值范围是1-22 ,不能重复,设计一个程序将未知量求出

大家有没有好的算法,刚看到这题目.来这看看大家的意思.
搜索更多相关主题的帖子: 算法 
2008-12-03 13:49
gongjiandenghua
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-12-03 13:55
lxh8810
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-12-3
收藏
得分:0 
说清楚点啊1A=1*A?
2008-12-03 16:40
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
//问题如下:1A+2B+3C+4D+5E+6F+7G=X
//其中X为已知量,A至G为未知量,取值范围是1-22 ,不能重复,设计一个程序将未知量求出

#include <stdio.h>
void main()
{
    int a,b,c,d,e,f,g,x,y,count=0;
    printf("input x(x>=84):  ");
    scanf("%d",&x);
    for(a=1;a<23;a++)
        for(b=1;b<23;b++)
            if(a!=b)
                for(c=1;c<23;c++)
                    if(a!=c&&b!=c)
                        for(d=1;d<23;d++)
                            if(a!=d&&b!=d&&c!=d)
                                for(e=1;e<23;e++)
                                    if(a!=e&&b!=e&&c!=e&&d!=e)
                                        for(f=1;f<23;f++)
                                            if(a!=f&&b!=f&&c!=f&&d!=f&&e!=f)
                                            {
                                                y=x-a-2*b-3*c-4*d-5*e-6*f;
                                                g=y/7;
                                                if(y%7==0&&g>=1&&g<=22&&a!=g&&b!=g&&c!=g&&d!=g&&e!=g&&f!=g)
                                                {   count++;
                                                    printf("%10d: %4d%4d%4d%4d%4d%4d%4d\n",count,a,b,c,d,e,f,g);
                                                }
                                            }
    printf("不定方程解的个数:count=%d\n",count);
}
2008-12-03 17:42
adminwyf
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-11-22
收藏
得分:0 
java代码,相同效果,
import java.util.*;
public class Test  
{
    public static void main(String[] args)
    {
         int A,B,C,D,E,F,G;
         int x = 100;
          for(A=1;A<10;A++)
        {
            for(B=1;B<10;B++)
            {
                for(C=1;C<10;C++)
                {
                    for(D=1;D<10;D++)
                    {
                        for(E=1;E<10;E++)
                        {
                            for(F=1;F<10;F++)    
                            {
                                for(G=1;G<10;G++)
                                {
                                    if(A*1+2*B+3*C+4*D+5*E+6*F+7*G==x)
                                    {
                                         HashSet hs  = new HashSet();
                                              hs.add(A);
                                              hs.add(B);
                                              hs.add(C);
                                              hs.add(D);
                                              hs.add(E);
                                              hs.add(F);
                                              hs.add(G);
                                         int size = hs.size();
                                            if(size==7)
                                            {
                                             System.out.println(A+":"+B+":"+C+":"+D+":"+E+":"+F+":"+G);
                                            }
                                    }
                                }
                            }
                        }
                    }
                    
                }
            }
          }
    }
}
2008-12-03 17:58
crowkkk
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2008-11-28
收藏
得分:0 
变量A-G没有规律,应该只能一个一个试了

while (1)
    学习;
2008-12-03 18:53
bayodyiu
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-18
收藏
得分:0 
为什么程序第五行的x>=84,怎么得出来的?请教一下!
2008-12-03 20:37
hottaro
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-11-24
收藏
得分:0 
谢谢各位
2008-12-03 21:37
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
我也来一个看看。。
题目没看太懂。不知道有没有错误.
程序代码:
#include <stdio.h>
int main(void){
  int a,b,c,d,e,f,g;
  int x;
  printf("Please enter x:\n");
  scanf("%d",&x);
  for(a=1;a<=22;a++)
    for(b=1;b<=22;b++){
      if(a!=b)
        for(c=1;c<=22;c++){
          if(a!=c && b!=c)
            for(d=1;d<=22;d++){
              if(a!=d && b!=d && c!=d)
                for(e=1;e<=22;e++)
                  if(a!=e && b!=e && c!=e && d!=e)
                    for(f=1;f<=22;f++){
                      if(a!=f && b!=f && c!=f && d!=f && e!=f)
                        for(g=1;g<=22;g++){
                          if(a!=g && b!=g && c!=g && d!=g && e!=g && f!=g)
                            if(a+2*b+3*c+4*d+5*e+6*f+7*g==x)
                              printf("A=%d\nB=%d\nC=%d\nD=%d\nE=%d\nF=%d\nG=%d\n",a,b,c,d,e,f,g);
                        }
                    }
            }
        }
    }
  getch();
  return 0;
}


不知道为什么速度好慢。。

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-12-03 21:52
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
回复 第7楼 bayodyiu 的帖子
"A至G为未知量,取值范围是1-22 ,不能重复,..."
不能重复---所以x最小取值为:
      1*7+2*6+3*5+4*4+5*3+6*2+7*1=84
小于84就无解了。
2008-12-03 21:53
快速回复:看看这个题目的算法
数据加载中...
 
   



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

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