CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

没有人知道吗?

楼主digiling(Turing)2001-03-02 20:15:00 在 C/C++ / C语言 提问

我报出21-201中的一个数字,你给我7个数字,这7个数字相加等于我报出的数字,而且这7个数字在1-36之间,怎么算? 问题点数:20、回复次数:16Top

1 楼ed9er(始祖鸟)回复于 2001-03-02 20:48:00 得分 0

是不是不多不少刚好7个?能不能重复?  
  Top

2 楼digiling(Turing)回复于 2001-03-02 22:22:00 得分 0

可以重复,必须刚好7个数字Top

3 楼donaldduck(冰雪笑容)回复于 2001-03-02 22:25:00 得分 0

编程思路:  
  1。不要用循环来求,那样至少要不得36的5次方,计算量很大。  
  2。采取以36为一个单位的选择,预先给它定好可能出现的值。  
  以下程序在BC++3.1下通过。(我没有时间验证它的可靠性如有问题请告诉我)  
  #include   <iostream.h>  
  #include   <conio.h>  
   
  void   main(void)  
  {  
        int   temp,i,Num[7];  
        for(i=0;i<7;i++)   Num[i]=3;  
        temp=0;  
        cout<<"Please   input   the   number   here:"<<endl;  
        cin>>temp;  
   
            if(temp>20&&temp<57)                   {     Num[5]=5;   Num[6]=temp-20;}  
   
            if(temp>56&&temp<93)       {       Num[0]=Num[1]=Num[2]=Num[3]=Num[4]=4;  
                Num[5]=36;Num[6]=temp-56;                                 }  
   
            if(temp>92&&temp<129)     {       Num[0]=Num[1]=Num[2]=Num[3]=5;  
                Num[4]=Num[5]=36;Num[6]=temp-92;                   }  
   
            if(temp>128&&temp<165)   {       Num[0]=Num[1]=7;Num[2]=6;  
                Num[3]=Num[4]=Num[5]=36;Num[6]=temp-128;   }  
   
            if(temp>164&&temp<202){     Num[0]=Num[1]=10;  
                Num[2]=Num[3]=Num[4]=Num[5]=36;Num[6]=temp-164;  
                              if(temp==201)Num[0]=Num[1]=11,Num[6]=temp-166;         }  
   
            if(temp<21||temp>201)     {       cout<<"You   Input   wrong   number"<<endl;  
                temp=0;               }  
   
   
            if(temp!=0)  
            for(i=0;i<7;i++)  
  cout<<Num[i]<<"\t";  
            getch();  
  }  
  Top

4 楼ed9er(始祖鸟)回复于 2001-03-02 23:26:00 得分 2

可以重复??不知道我是不是想的太简单了:  
   
  #include   <stdio.h>  
   
  main()   {  
          int   i,   j;  
          scanf(   "%d",   &i   );  
          for   (j   =   0;   j   <   (7-i%7);   j++)  
                  printf("%d,",i/7);  
          for   (j   =   0;   j   <   i%7;   j++)  
                  printf("%d,",   i/7   +   1);  
          printf("\n");  
  }  
   
   
  Top

5 楼digiling(Turing)回复于 2001-03-03 01:15:00 得分 0

唉,都不对:(    
  一个数可以是好几组7个数字之和  
  Top

6 楼ed9er(始祖鸟)回复于 2001-03-03 02:13:00 得分 0

听不懂Top

7 楼donaldduck(冰雪笑容)回复于 2001-03-03 07:22:00 得分 0

你是要所有可能的组合吗?Top

8 楼donaldduck(冰雪笑容)回复于 2001-03-03 08:44:00 得分 0

下面的程序可以计算出所有的组合,而且按大小排序。  
  解轻了计算量,避免了重复。  
  //   Using   BC++3.1  
  #include<iostream.h>  
  #include<conio.h>  
  int   a[7],n;  
  int   collate(int);//比较,确定  
  void   main(void)   {  
        int   i;  
        cin>>n;  
        for(a[0]=1;a[0]<37&&collate(1);a[0]++)  
          for(a[1]=a[0];a[1]<37&&collate(2);a[1]++)  
            for(a[2]=a[1];a[2]<37&&collate(3);a[2]++)  
              for(a[3]=a[2];a[3]<37&&collate(4);a[3]++)  
                for(a[4]=a[3];a[4]<37&&collate(5);a[4]++)  
                  for(a[5]=a[4];a[5]<37&&collate(6);a[5]++)  
    for(a[6]=a[5];a[6]<37&&collate(7);a[6]++)     //按大小来排序,避免重复  
      if(collate(7)==2){  
          for(i=0;i<7;i++)     cout<<a[i]<<"\t";  
          getch();         cout<<endl;}  
  }  
  int   collate(int   i)   {  
        int   temp=0,j;  
        for(j=0;j<i;j++)  
              temp+=a[j];  
        if(temp>n)               return   0;  
            else   if(temp==n)   return   2;  
            else   return   1;  
  }  
  Top

9 楼digiling(Turing)回复于 2001-03-03 09:53:00 得分 0

donaldduck(丰臣秀吉)的答案有点接近了,但在同一组里,7个数字是不能重复的呀,eg;只能是   1     2   3   4   5   6   7   而   不是     1   1   1     1   7   8   8   9   Top

10 楼vcyzq(逸轩)回复于 2001-03-03 10:21:00 得分 0

关注!Top

11 楼donaldduck(冰雪笑容)回复于 2001-03-03 10:30:00 得分 17

但是  
  1+2+3+4+5+6+7=28     !!!!  
  21~27怎么办呀,  
  但是   :0+1+2+3+4+5+6=21  
  所以   ,如果可以为零的话只须稍微的修改一下我的程序:  
  //Using   BC++3.1  
  #include<iostream.h>  
  #include<conio.h>  
  int   a[7],n;  
  int   collate(int);  
  void   main(void)   {  
      int   i,j;  
      cin>>n;  
      for(a[0]=0;a[0]<37&&collate(1);a[0]++)  
          for(a[1]=a[0]+1;a[1]<37&&collate(2);a[1]++)  
            for(a[2]=a[1]+1;a[2]<37&&collate(3);a[2]++)  
              for(a[3]=a[2]+1;a[3]<37&&collate(4);a[3]++)  
                for(a[4]=a[3]+1;a[4]<37&&collate(5);a[4]++)  
  for(a[5]=a[4]+1;a[5]<37&&collate(6);a[5]++)  
    for(a[6]=a[5]+1;a[6]<37&&collate(7);a[6]++)//无重复,按序  
        if(collate(7)==2){  
          for(i=0;i<7;i++)     cout<<a[i]<<"\t";  
          getch();                 cout<<endl;}  
  }  
  int   collate(int   i)   {  
      int   temp=0,j;  
      for(j=0;j<i;j++)  
              temp+=a[j];  
      if(temp>n)             return   0;  
          else   if(temp==n)   return   2;  
          else   return   1;  
  }  
   
  如果不可以为零,请把小于28的分开来讨论,再修改第一个for循环为:  
                                for(a[0]=1;a[0]<37&&collate(1);a[0]++)  
    Top

12 楼vcyzq(逸轩)回复于 2001-03-03 10:37:00 得分 1

to   digiling(Turing):  
        你的表达能力欠缺,你的题目当中没有说不准重复,而且,你只说了7个数字,两组的话不是有14个数字了???我刚才编了一个,好像没有找到这7个数字,嘻嘻!(忙了老半天).Top

13 楼vcyzq(逸轩)回复于 2001-03-03 10:47:00 得分 0

donaldduck(丰臣秀吉):  
              我服了u,多谢指点!好像第7行的那个j要去掉哦!Top

14 楼donaldduck(冰雪笑容)回复于 2001-03-03 11:02:00 得分 0

是呀,我忘了~~~  
  一开始我以为会用到呢Top

15 楼donaldduck(冰雪笑容)回复于 2001-03-03 11:05:00 得分 0

多谢逸轩兄鼓励。  
  我刚来,还要前辈们多多支持。Top

16 楼digiling(Turing)回复于 2001-03-04 15:45:00 得分 0

多谢donaldduck(丰臣秀吉) ,加分~~~~~~Top

相关问题

  • 没有人知道吗???
  • 有没有人知道-大富翁-啊?
  • 到底有没有人知道????
  • 不会没有人知道吧!
  • MSHFlexGrid控件..难道没有人知道??
  • 难道没有人知道吗?
  • 到底有没有人知道啊?
  • 有没有人知道阿???在线!!!
  • 难道就没有人知道吗?????
  • netddesrv.exe怎么杀,有没有人知道?

关键词

  • c++
  • 数字
  • temp
  • main
  • include
  • else

得分解答快速导航

  • 帖主:digiling
  • ed9er
  • donaldduck
  • vcyzq

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo