| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8349 人关注过本帖, 1 人收藏
标题:解韩信点兵问题
只看楼主 加入收藏
beyond0702
Rank: 1
来 自: 桂 林
等 级:新手上路
帖 子:219
专家分:0
注 册:2007-11-17
收藏
得分:0 
反正题目 的条件就是那么多,至于怎么解,那是你自己的 想法了。。
对于这样的题目或许每个人的理解不一样。各有各的道理吧
2008-04-26 14:47
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 31# 的帖子
~~~~~~~~~~~~~~~~~~~~~~~`
    简直要晕倒~
   
    你出题的人,都没理解这题要求什么样的效果——或者结果,那你要别人怎么作呢?如果是从网上看到的这题,请把链接发出来;如果是书上的题,请把原题发一遍。不要按照你自己的理解把题贴出来,因为你自己也没理解,那样只会浪费大家的时间。
2008-04-26 15:43
精灵传说
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-3-25
收藏
得分:0 
看偶的 忙了半天 嘿嘿
#include <iostream>
using namespace std;

int Min(const int x,const int y,const int z)                           //3个数最小公倍数
{
    int sum=x*y*z;
    int a=x;
    int b=y;
    int c=z;
   
    for(int i=2 ; i<=y ; )
     {
            if (a%i==0 && b%i==0 && c%i==0)
             {
                       sum=sum/i/i;
                       a=a/i;
                       b=b/i;
                       c=c/i;
             }
             else  if (a%i==0 && b%i==0)
             {
                   sum=sum/i;
                   a=a/i;
                   b=b/i;      
             }
             else if  (a%i==0 && c%i==0)
             {
                  sum=sum/i;
                  a=a/i;
                  c=c/i;
             }
             else if  (b%i==0 && c%i==0)
             {
                  sum=sum/i;
                  b=b/i;
                  c=c/i;
             }
             else i++;
     }     
     return(sum);
}              

int main(void)
{
    int a,b,c,x,y,z;
    int k;
    int sum;
    int i;
   
    cout<<"请由小到大输入3个除数 "<<endl;
    cin>>x>>y>>z;
    if ( x<=1 || x>=y || x>=z || y>=z)
    {
         return(0);
    }
    cout<<"请输入3个余数"<<endl;
    cin>>a>>b>>c;
    if (a<0 || b<0 || c<0 || a>=x || b>=y || c>=z)
    {
            return(0);
    }                 
    sum=z-c;
   
    k = Min(x,y,z);
   
    for(i=0 ; i<k/z ; i++)                                 //以下实际上是解方程
    {
            sum=sum+z;
            if (sum%x ==x-a && sum%y == y-b )
             {
                      break;
             }        
            if (a==0 && b==0 && sum%x==0 && sum%y==0)       //讨论余数为0
             {
                     break;
             }            
            if (a==0 && b!=0 && sum%x==0 && sum%y==y-b)
            {
                     break;
            }
            if (a!=0 && b==0 && sum%x==x-a && sum%y==0)
            {
                     break;           
            }
    }
    if(i>=k/z)
    {
              cout<<"不存在这样的数 "<<endl;
               
    }                 
    else
    {
        if (k-sum>0)
          {
                      cout<<k-sum<<",";
          }                    
        for(int j=2*k ; j<20000 ; j+=k)
         {
                cout<<j-sum<<",";
         }      
         cout<<endl;      
     }            
               
                                 
         cout<<"谢谢观赏欢迎提供意见"<<endl;
   
    cin.get();
    cin.get();         
    return(0);
}

there is a castle on a cloud
2008-04-26 16:01
精灵传说
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-3-25
收藏
得分:0 
自己顶一下 难得写出自己满意的代码

there is a castle on a cloud
2008-04-26 20:24
beyond0702
Rank: 1
来 自: 桂 林
等 级:新手上路
帖 子:219
专家分:0
注 册:2007-11-17
收藏
得分:0 
我写的是原题。一个字都没改。我的理解 是余数是随机的
2008-04-27 18:00
game9688
Rank: 2
等 级:论坛游民
帖 子:26
专家分:13
注 册:2008-4-26
收藏
得分:0 
解韩信点兵问题
编程求解韩信点兵问题:先让5个人一组看余多少个,再8个人一组看余多少个,再12人一组看雨多少个。根据这3个余数就可以知道精确的人数。
    5人一组的余数就不会大于5;0-4;  8人一组的余数0-7;  12人一组的余数就是 0-11;
    第一;二;三 组随机数 保存在变量中,I,J,K;
    总人数就设个总人数的变量.REN;
    用当型循环不就行了,条件满足就退出循环;可是这样可能会有死环发生;而且还不是唯一人数;更有可能此数存在可是他还在循环呢?
韩信一时兴奋喊道:我我~~~我!!韩信急忙咽了口口水说道:小样终于被我逮到了吧.......
2008-04-28 00:19
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
[bo]以下是引用 [un]广陵绝唱[/un] 在 2008-4-26 15:43 的发言:[/bo]

~~~~~~~~~~~~~~~~~~~~~~~`
    简直要晕倒~
   
    你出题的人,都没理解这题要求什么样的效果——或者结果,那你要别人怎么作呢?如果是从网上看到的这题,请把链接发出来;如果是书上的题,请把原题发一遍。不要按照你自己的理解把题贴出来,因为你自己也没理解,那样只会浪费大家的时间。

哈哈

" border="0" />[color=white]
2008-04-28 18:27
pearruan
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-4-28
收藏
得分:0 
2008-04-28 23:18
cder2008
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-1-31
收藏
得分:0 
如果直接检索的话好像有点慢吧
我写了下面这个,想问问高手,这个程序的速度是不是比让n直接检索到120000要快12倍呢?
#include<stdio.h>
void main()
{
    int OKORNOT=0;
    int n12=0;
    int yu5,yu8,yu12;
    scanf("%d%d%d",&yu5,&yu8,&yu12);
    do
    {
        if((12*n12+yu12)%5==yu5&&(12*n12+yu12)%8==yu8)
        {
            printf("最小的匹配结果是%d\n",n12*12+yu12);
            OKORNOT=1;
        }
        n12++;
    }while(OKORNOT==0&&n12<=10000);
    if(OKORNOT==0)
        printf("输入的模数在120000以内无解");
}
2008-04-29 17:26
cder2008
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-1-31
收藏
得分:0 
这个程序不是最好的
有点笨
只是写出来问一下各位速度的问题
不要笑我哈
2008-04-29 17:30
快速回复:解韩信点兵问题
数据加载中...
 
   



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

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