A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. int sum = GetSum();
  2. Console.WriteLine(sum);
  3. Console.ReadKey();

  4. public static int GetSum()
  5.         {
  6.             int sum = 0;
  7.             for (int i = 2; i <= 100; i++)
  8.             {
  9.                 bool b = true;
  10.                 for (int j = 2; j < i; j++)
  11.                 {
  12.                     if (i % j == 0)
  13.                     {
  14.                         b = false;
  15.                     }
  16.                     if (b)
  17.                     {
  18.                         sum += i;
  19.                     }
  20.                 }
  21.                
  22.             }
  23.             return sum;
  24.         }
复制代码
为什么结果是66705

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

4 个回复

倒序浏览
你的程序运行没有问题
你同学的结果是多少?32489
回复 使用道具 举报
本帖最后由 §風過無痕§ 于 2013-8-18 14:20 编辑

你的意思是不是只要不满足  if (i % j == 0)这个条件的  都执行sum += i;这个操作呀

如果是以上意思的话:把这句  bool b = true; 的位置往下移  试试!
  1. for (int i = 2; i <= 100; i++)
  2. {
  3.      // bool b = true;
  4.      for (int j = 2; j <i; j++)
  5.      {
  6.      bool b = true;
  7.      if (i % j == 0)
  8.      {

  9.           b = false;
  10.      }
  11.      if (b)
  12.      {
  13.           sum += i;
  14.      }
  15. }

  16. }
复制代码


回复 使用道具 举报
本帖最后由 黑骏马 于 2013-8-19 09:04 编辑



你的代码,在内层for循环中,第一次满足i%j==0后,b的值变成false,之后不会再改变,if(b){sum+=i}不会被执行,直至内层循环结束,i++后b变为true,再次进入内层for循环,第一次满足i%j==0后,b的值再变成false,不再改变……



根据你的代码的意思,应该把bool b = true;移到内层for循环中:
  1. public static int GetSum()
  2. {
  3.     int sum = 0;
  4.     for (int i = 2; i <= 100; i++)
  5.     {
  6.         //bool b = true;//return 66705
  7.         for (int j = 2; j < i; j++)
  8.         {
  9.             bool b = true;//return 311471
  10.             if (i % j == 0)
  11.             {
  12.                 b = false;
  13.             }
  14.             if (b)
  15.             {
  16.                 sum += i;
  17.             }
  18.         }
  19.     }
  20.     return sum;
  21. }
复制代码
其实代码完全可以简化一下这样写意思更清楚:
  1. public static int GetSum()
  2.         {
  3.     int sum = 0;
  4.     for (int i = 2; i <= 100; i++)
  5.     {
  6.         for (int j = 2; j < i; j++)
  7.         {
  8.             if (i % j != 0)  //这样写意思不是更清楚明白吗?
  9.             {
  10.                 sum += i;
  11.             }
  12.         }
  13.     }
  14.             return sum;//311471
  15.         }
复制代码
2楼小天的结果为什么是32489?比楼主的代码计算的结果还小。





回复 使用道具 举报
主要是不知道楼主题目是啥意思~~还是把贴出来吧啊~

注意 b的值,单步进行调试~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马