【2013年11月12号】日记

 1 /*   一个数如果恰好等于它的因子之和, 则这个数称为“完数”。 编写程序写出1000以内的完数;
 2   我一开始错误的程序*/
 3 #include <stdio.h>
 4 int main()
 5 {
 6     int i, j, ,sum=0;
 7      
 8     for(i=2; i<1000; i++)
 9     {
10         for(j=1; j<i; j++)
11         {
12             if(i%j==0)
13                 sum+=j;   //错误之处, sum没有还原成0; 导致sum是所有因子的和
14         }
15         if(sum==i)
16             printf("%d\n", i);
17     }
18  
19     return 0;
20 }
21 /*
22     在Vc++6.0中的输出结果是:
23     Press any key to continue
24 */

 

这个程序的错误之处是个比较简单的错误, 但当时自己思考了很长时间也没想到, 归根结底原因还是自己的懒惰, 没有按照郝斌老师说的一步一步用一些数来实验, 而是自己一味的空想, 导致没有找到, 引此为鉴!

心得:以后如果遇到自己无法调试错误的程序, 一定得一步一步的用数去试,脚踏实地,直至成功!

 

 1 /*
 2 正确的程序(在李方的帮助下)
 3 */
 4 #include <stdio.h>
 5 int main()
 6 {
 7     int i, j, sum;
 8      
 9     for(i=2; i<1000; i++)
10     {
11         for(j=1,sum=0; j<i; j++)    // 关键的一步:将sum的值在因子循环的时候赋为零
12         {
13             if(i%j==0)
14                 sum+=j;
15         }
16         if(sum==i)
17             printf("%d\n", i);
18     }
19  
20     return 0;
21 }
正确的程序

 

 第二个程序:

 1 /*
 2 用40元钱买西瓜、苹果和梨共100个,且三种水果都有。已知苹果0.4元一个, 西瓜4元一个, 梨0.2元一个。问可以买多少个?
 3 */
 4 #include <stdio.h>
 5 int main()
 6 {
 7     int x, y, z;
 8     if(x+y+z==100)   //错误之处:没有给x y z赋值, 计算机不会自动去试数
 9         if(0.4*x+4*y+0.2*z==40)
10         {
11             printf("x = %d\n", x);
12             printf("y = %d\n", y);
13             printf("z = %d\n", z);
14         }    
15 
16     return 0;
17 }
18 /*
19 Press any key to continue
20 */

心得:编程序时要给里面的变量通过赋值来让计算机进行判断,而不是直接让计算机去试数。

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int x, y, z;
 6 
 7     for(x=1; x<98; x++)
 8     {
 9         for(y=1; y<98; y++)
10         {
11             z = 100-x-y;
12             if(0.4*x+4*y+z*0.2==40)
13                 printf("%d, %d, %d\n", x, y, z);
14         }
15     }    
16 
17     return 0;
18 }
正确的程序2

 

posted @ 2013-11-13 12:36  栋先生  阅读(200)  评论(6)    收藏  举报