验证尼科彻斯定理:用户输入一个表示范围的值count,测试3~count所有的整数是否都符合尼科彻斯定理

  尼科彻斯定理:任何一个大于2的整数的立方都可以表示成一串连续奇数的和。

  题目要求

        1.用户输入一个表示范围的值count,测试3~count所有的整数是否都符合尼科彻斯定理

        2.有设置选项,让用户选择是否打印出所有整数

  

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n,cube,i,j,count,sum=0;
 5     printf("请输入整数:");
 6     scanf("%d",&count);
 7     int a[count][4];    //设置一个二维数组来存储3~count中每个数需要打印的值
 8     int result=1;    //做后面的验证信息
 9     char answer;
10     
11     for(n = 3;n <= count; n++)
12     {
13         a[n][0]=0;        //将每个数组第一元素设为0,为了后面验证使用 
14     }
15      
16      
17     for(n = 3;n <= count;n++)
18     {    
19         cube= n * n * n;
20     
21         for(i=1;i<cube;i+=2)
22         {
23             for(j=i;j<cube;j+=2)
24             {
25                 sum+=j;
26                 if(sum==cube) 
27                 {
28                     a[n][0]=cube;    //将每个数需要打印的信息存在二维数组里
29                     a[n][1]=i;
30                     a[n][2]=i+2;
31                     a[n][3]=j;
32                     
33                     goto out;
34                 }
35                 
36                 if(sum>cube)
37                 {
38                     sum=0;
39                     break;
40                 }     
41             }
42         }
43         out:
44             ;
45         
46     }
47     
48     for(n=3;n<count;n++)  
49     {
50         if(a[n][0]==0)              //验证a[n][0]是否为0,来判断当时n值是否符合定理 
51         {
52             result=0;
53             break;
54         }
55     }
56     
57     if(result==1)
58     {
59         printf("3~%d的数全部符合尼科彻斯定理\n",n);
60         printf("是否打印所有式子(y/n)?");
61         getchar();
62         scanf("%c",&answer);
63     }
64     else
65     {
66         printf("%d无法找到连续奇数",n);
67     } 
68     
69     if(answer=='y')     //y是字符 所以要加''  
70     {
71         for(n=3;n<=count;n++)
72         {
73             if(i-j>4)
74             {
75                  printf("%d:%d = %d + %d ...+%d\n",n,a[n][0],a[n][1],a[n][2],a[n][3]);
76             }
77             else
78             {
79                 printf("%d:%d = %d + %d + %d\n",n,a[n][0],a[n][1],a[n][2],a[n][3]);    
80             } 
81         }
82     }
83     
84         
85         return 0;
86 }

  

  思路解析:

        1. 设置一个二维数组来存储3~count每个数需要打印的数据,并设置二维数组每行第一个元素为0,为后面用来找出不符合规定的值n。

        2.用3个for循环来寻找3~count每个数是否符合尼科彻斯的规则,若符合就把相应数据存到二维数组中。若不符合规定,就将sum=0,并且将设置的验证信息result的值设为0。

                      (result验证信息和设置第一个元素为0用的很巧妙,若result=0就代表3~count中有不符合规定的数,再用for循环遍历每个数组的第一个元素的值(第一步中把所有值设置为0),若符合规定,那么数组中一定会被赋值。所以元素为0时, 此时的n肯定是不符合规定的)

        3.利用result当前的值作为判断条件,来输出结果。

 

  

 

posted @ 2017-02-04 21:45  早发现早治疗  阅读(286)  评论(1)    收藏  举报