验证尼科彻斯定理:用户输入一个表示范围的值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当前的值作为判断条件,来输出结果。


浙公网安备 33010602011771号