关于第六周第二题的一些设定条件的测试和疑问

解占福 发表于2016年12月12日
<p>第六周的第二个测试题是关于完数的,题目要求的条件为:<img src="https://nos.netease.com/edu-image/5dfb5a45-27c1-46f7-8e2e-71ba209fd3f4.PNG" />我设定的条件为:</p><p><span style="color: rgb(238, 51, 238);" >int n,m;</span></p><p><span style="color: rgb(238, 51, 238);" > scanf(&quot;%d %d&quot;,&amp;n,&amp;m);</span></p><p><span style="color: rgb(238, 51, 238);" > if( n &gt;= 1 &amp;&amp; m &lt;=1000 &amp;&amp; n &lt;= m )</span></p><p><span style="color: rgb(238, 51, 238);" > {</span></p><p><span style="color: rgb(238, 51, 238);" > wanshu( n,m );</span></p><p><span style="color: rgb(238, 51, 238);" > }</span></p><p> </p><p>只有这样才能全部通过。</p><p><br ></p><p>如果把 &nbsp;<span style="color: rgb(238, 51, 238);" >if( n &gt;= 1 &amp;&amp; m &lt;=1000 &amp;&amp; n &lt;= m ) &nbsp;<span style="color: rgb(0, 0, 0);" >改为:</span>&nbsp;if( n &gt;= 1 &amp;&amp; m &lt;1000 &amp;&amp; n &lt;= m ),</span><span style="color:#000000;" >则出现下述情况:</span></p><p><span style="color:#000000;" ><br ></span></p><p><span style="color:#000000;" ><img src="https://nos.netease.com/edu-image/1e2f653d-ebfb-417a-947e-37f54bcc1c2d.PNG" /></span></p><p><span style="color:#000000;" ><br ></span></p><p><span style="color:#000000;" >如果把 &nbsp;if( n &gt;= 1 &amp;&amp; m &lt;=1000 &amp;&amp; n &lt;= m ) &nbsp;改为:&nbsp;if( n &gt;= 1 &amp;&amp; m &lt;=1000 &amp;&amp; n &lt; m ),则出现下述情况:</span></p><p><span style="color:#000000;" ><br ></span></p><p><span style="color:#000000;" ><img src="https://nos.netease.com/edu-image/48d34308-95f3-4284-a9b3-b9d3541909e1.PNG" /></span></p><p><span style="color:#000000;" ><br ></span></p><p><span style="color:#000000;" >以我的理解,题目要求 (1&lt;=n&lt;m&lt;1000) 就应该理解为(n&gt;=1 &amp;&amp; n&lt;m &amp;&amp; m&lt;1000),但是这样做的结果就是只有用例1通过,其他都不能通过。</span></p><p><span style="color:#000000;" ><br ></span><br ></p>
2 回复

    1楼

  • USTB李昌赫 发表于2016年12月12日
    0 | 1 | 举报
    <p>你的wanshu函数中第一个for循环的循环条件应该是i&lt;=y,</p><p>不然循环不到输入的最大值m就结束了</p><p>所以才会有那一系列问题</p>
    USTB李昌赫 发表于2016年12月12日
    • 解占福 2016年12月12日
      0 | 举报
      <p>这个就是我调试后的结果,当然条件改成: &nbsp;if( n &gt;= 1 &amp;&amp; m &lt; 1000 &amp;&amp; n &lt; m )</p><p><br ></p><p><img src="https://nos.netease.com/edu-image/b7a25dd6-8846-4e05-a522-d385214656b6.PNG" /></p>
      解占福 发表于2016年12月12日
      0 | 举报
    添加评论
  • 2楼

  • 轻叹花开丶花落流年 发表于2016年12月12日
    0 | 0 | 举报
    <p>void perfect(int n, int m){</p><p>&nbsp; &nbsp; int k = 0,t=n,j=0;</p><p>&nbsp; &nbsp; for (t ; t &lt;= m; ++t)</p><p>&nbsp; &nbsp; {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; int sum = 0,i;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; for (i = 1; i &lt;= t / 2; i++)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (t % i == 0)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sum += i;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; if (sum == t)</p><p>&nbsp; &nbsp; &nbsp; &nbsp; {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (k == 0)&nbsp;</p><p> {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printf(&quot;%d&quot;, t);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k = 1;j++;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if (k == 1)</p><p> &nbsp; {printf(&quot; %d&quot;, t);j++;}</p><p> </p><p> }</p><p> if(t==m&amp;&amp;j==0) printf(&quot;NIL&quot;);</p><p>&nbsp; &nbsp; }</p><p><br ></p><p>}</p><p><br ></p><p>int main(){</p><p>&nbsp; &nbsp; int m, n;</p><p>&nbsp; &nbsp; scanf(&quot;%d %d&quot;, &amp;n, &amp;m);</p><p><br ></p><p>&nbsp; &nbsp; perfect(n, m);</p><p>&nbsp; &nbsp; putchar('\n');</p><p>&nbsp; &nbsp; return 0;</p><p>}</p><p><br ></p>
    轻叹花开丶花落流年 发表于2016年12月12日
    添加评论