打开考生文件夹下的解决方案文件proj3,其中声明了MagicNumber类,该类是一个用于表示连续正整数序列的类。MagicNumber的成员函数Intimacy的功能是查找该序列中的亲密数对。亲密数对的定义是:如果整数a的所有正因子(包括1,但不包括a

admin2020-04-10  42

问题 打开考生文件夹下的解决方案文件proj3,其中声明了MagicNumber类,该类是一个用于表示连续正整数序列的类。MagicNumber的成员函数Intimacy的功能是查找该序列中的亲密数对。亲密数对的定义是:如果整数a的所有正因子(包括1,但不包括a自身)之和等于b,并且整数b的所有正因子(包括l,但不包括b自身)之和等于a,则称整数a和b为亲密数对。
    请根据亲密数的定义编写成员函数Intimacy。在main函数中给出了一组测试数据,此时程序的输出应该是:
    1和1000之间的亲密数对为:
    220和284
    注意:只需在函数Filter的//*******333*******和//*******666*******之间填入若干语句,不要改动程序中的其他内容。
        //MagicNumber.h
        #include<iostream>
      #include<string>
      #include<cmath>
      #pragma warning(disable:4996)
      using namespace std;
      class MagicNumber
      {
       public:
          MagicNumber(int x1,int x2): min(x1),max(x2),count(C){}
          void ResetCount(){count=0;}
          int GetCount()const{return count;}
          int GetSet(int index){return set[index];}
          void Intimacy();//寻找亲密数对
          void Print()
          {
              cout<<min<<"和"<<max<<"之间的亲密数为:"<<endl;
              for(int i=0;i<count;i+=2)
                 cout<<set<<"和"<<set[i+1]<<endl;
           }
      private:
          int digits;//Magic数的位数
          int min,max;//待计算的数值范围
          int count;//Magic数的数量
          int set[40];//Magic数集合
       };
      void writeToFile(const char*);
   
      //main.cpp
      #include"MagicNumber.h"
      void MagicNumber::Intimacy()
      {
   
         int number;
       for(number=min;number<max;number++)
             {
                //******333******
      
                //******666******
          }
      }
   
      int main()
      {
          MagicNumber obj(1,i000);
          obj.Intimacy();
          obj.Print();
          writeToFile("");
   
          return 0;
      }

选项

答案void MagicNumber::Intimacy() { int number; for(number=min; number<max;number++) { int i; //过滤已经处理过的亲密数对 bool exist=false; for(i=0;i<count; i++) { if(number==set[i]){ exist=true; } } if(exist){ continue; } int numberA=number; int numberB=0; int sumA=0,sumB=0; //求numberA的所有正因子之和surnA for(i=1; i<=numberA/2;i++) { if(numberA%i==0){ sumA+=i; } } //判断sumA的合法性 if(sumA<min || sumA>max || sumA==numberA){ continue; } //让numberB等于sumA求numberB的所有正因子之和sumB numberB=sumA; for(i=1;i<=numberB/2;i++){ if(numberB%i==0){ sumB+=i; } } //判断numberA和mumberB是否属于亲密数对若是存入set;数组更新count if(sumB==numberA){ set[count;++]=nuraberA; set[count++]:numberB; } } }

解析 根据题意,Intimacy是求rain和max之间的亲密数对,程序首先遍历rain和max之间的所有整数,在遍历的过程中,判断当前的numberA是否处理过,如果处理过继续判断下一个数;然后求numberA的正因子之和sumA,如果sumA不在min和max之间,或sumA等于numberA,说明当前sumA不合法,继续处理下一个数;否则sumA赋给numberB,求numberB的正因子之和sumB,最后判断sumB是否与numberA相等,如果相等,说明numberA和numberB属于亲密数对,存入set数组并更新count。
转载请注明原文地址:https://jikaoti.com/ti/SwA0FFFM
0

最新回复(0)