❤️ 纯C实现-------尼科彻斯定理
题目来源--------------->牛客网:尼科彻斯定理
💚 题目分析
题目描述:
验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和
例如:
1^3 = 1
2^3 = 3 +5
输入描述:
输入一个int整数
输出整数:
输出分解后的string
💛 法1:暴力求解
#include<stdio.h>
#include<math.h>
int main()
{
//输入
int n = 0;
scanf("%d", &n);
int count = 0; //用来记录总和的大小
int m = (int)pow(n, 3);
//判断求解
int i = 1; //让i从第一个奇数开始
while(i<=m)
{
int j = 0;
for(j = 0; j < n; j++)
{
count = count + i +2*j ; //计算出n个连续的奇数之和,赋值为count
}
if(m == count) //当count等于n立方时,及时跳出while循环
break;
count = 0; //及时将count赋值为0
i += 2; //如果不是让i跳到下一个奇数
}
//输出
int k = 0;
int a = 0;
for(k = 0; k<n; k++)
{
printf("%d",i+k*2);
if(k < n-1) //增加这一个条件防止多打印一个+
printf("+");
}
return 0;
}
💜 法2:数学规律求解
如果是与数学定理相关的题目,那必然存在相关的规律,寻找规律,巧妙利用数学规律求解。
本题中,m个连续的奇数中第一个奇数就为 m*(m-1) +1
#include<stdio.h>
#include<math.h>
int main()
{
int n = 0;
scanf("%d",&n);
int fir = n*(n-1)+1; //找到第一个奇数
int i = 0;
for(i = 0;i<n;i++)
{
printf("%d",fir+(i*2));
if(i < n-1)
{
printf("+");
}
}
return 0;
}
💗 总结
如果是数学定理相关的题目,就尽量先找到数学规律,再进行代码的书写!相比较与暴力求解,利用数学规律写出来的代码量必定少,而且简洁高效!