13 | 程序设计原则:把计算过程交给计算机
一道简单的数学题
1. 把计算过程,交给计算机
- 深入了解
- 翻译
- 解释
- 总结
数学思维在编程中的重要性是本文的核心主题。作者通过一个具体的编程问题,引导读者思考如何用程序解决数学问题,并强调了将计算过程交给计算机的重要性。文章展示了一个C语言程序,通过循环遍历和条件表达式来实现求解1000以内所有3或5的倍数的和的问题。作者强调了程序设计的目的是减少人类在解决问题中的具体计算过程,而将计算过程交给计算机。文章突出了程序设计原则的重要性,以及如何将数学思维与编程相结合,为读者提供了有益的技术指导。同时,文章还提到了算法思维的重要性,以及如何通过算法思维来提高程序的效率。通过具体的编程示例和数学思维的引导,读者可以更好地理解程序设计原则和算法思维的重要性。
《人人都能学会的编程入门课》,新⼈⾸单¥59
全部留言(11)
- 最新
- 精选
- 栾~龟虽寿!老师说的,递归不能算,一种算法,领教了,这次课,提现了,算法的基础是数学,我说一句,算法和数学都是前人的智慧结晶。
作者回复: ^_^
2020-02-142 - 宋不肥#include<stdio.h> int main(){ int i; printf("Please input a number\n"); scanf("%d",&i); int squareofsum = (i*(i+1)/2)*(i*(i+1)/2); int sumofsquare = (1 + i) * (1 + i) * i / 4 + i * (i * i - 1) / 12; int result = squareofsum - sumofsquare; printf("the result of the difference between sumofsquare and squareofsum is %d",result); } 本科学数学的,保到了计算机读研,公式推导什么的都还行,发现代码能力和计算机底层的一些知识都很弱,对照了其他同学的答案,发现最近没有把计算封装成一个函数,也没有考虑差不为1的情况,写出来的东西很难复用,好想开学之前快点提高自己的代码能力啊
作者回复: d(^_^o),成长是一个过程,找到自己的节奏,不懈怠,不匆忙。坚持,加油!
2020-02-1821 - 不便明言#include<stdio.h> int main() { int n, Sum_squares, squares_Sum, balance; printf("请输入一个序列最大的数字:\n"); scanf("%d", &n); n -= 1; Sum_squares =(n* (n + 1) / 2)* (n * (n + 1) / 2); squares_Sum = n * (n + 1) * (2 * n + 1) / 6; balance = Sum_squares - squares_Sum; printf("%d以内和的平方是%d,平方和是%d,差为%d\n", n+1, Sum_squares, squares_Sum, balance); system("pause"); }
作者回复: 完全正确
2020-02-1641 - 罗耀龙@坐忘茶艺师学编程 /*编写程序,计算 100 以内自然数“和的平方”与“平方和”的差 以及等差数列的平方和公式 */ #include <stdio.h> int main(){ int sum2 = 0; int sum1 = (((1 + 99) * 99) / 2) * (((1 + 99) * 99) / 2);//和的平方 for(int i = 0; i < 100; i++){//平方和 sum2 += i * i; } printf("%d\n", sum1 - sum2); int a1, d, n; scanf("%d %d %d", &a1, &d, &n); int sum3 = n*a1*a1+n*d*(n-1)+n*(n-1)*(2*n-1)*d*d/6;//等差数列的平方和公式 printf("使用循环方法计算的平方和:%d\n使用平方和公式算出的结果:%d", sum2, sum3); return 0; }
作者回复: d(^_^o)
2020-06-21 - 信念https://github.com/spiritfaith/Hello-Git/blob/master/think_everyone13.c
作者回复: 代码中的 sum1计算,可以分成两步,会减少编码错误的概率。第一步 sum1 计算得到1--100的和值,第二步,计算 sum1的平方。
2020-06-012 - 信念int sum3 = (3 + 999 / 3 * 3) * (999 / 3) / 2; 999 / 3 * 3 这个用的应该是等比数列的通项公式求的第n项
作者回复: 不是的~~你再好好想想,这是等差数列的项数。等比数列的增长吓死人的:3 9 27 81 ....
2020-06-01 - Neo_Zhang实现 ```c #include<stdio.h> int hepingfang(int n) { return (1 + n) * (1 + n) * n / 4 + n * (n * n - 1) / 12; } int pingfanghe(int n) { return (1 + n) * (1 + n) * n / 4 + n * (n * n - 1) / 12; } int main() { //计算 100 以内自然数“和的平方”与“平方和”的差 int n; scanf("%d",&n); printf("%d - %d = %d\n",hepingfang(n),pingfanghe(n),hepingfang(n)-pingfanghe(n)); } ```
作者回复: 非常不错,还做了相关的函数封装!赞!
2020-05-24 - Noya#include <iostream> using namespace std; typedef long long ll; int n; ll sum_pow, pow_sum = 1; int main(void) { scanf("%d", &n); sum_pow = ((1 + n) * n / 2) * ((1 + n) * n / 2); //发现之间是一个等差数列 //1+(1+3)+(1+3+5)+....+(1+3+5+.....an) int start = 1; int d = 2; int x = 1; int cur = start; for (int i = 2; i <= n; i++) // x 1+x+2 1+x+2+(x+2+2) 1+x+2+(1+2+2)+(1+2+2+2) { x += d; cur += x; pow_sum += cur; } printf("%lld\n", sum_pow - pow_sum); return 0; }
作者回复: 哈哈哈哈,你这种发现很不错,也挺新颖的。赞一个
2020-05-19 - 1043计算机的计算都是天然的能力,1、把1-100都转换二进制然后按位与运算,之后把这个数平方再转回十进制;2、把1-100转换二进制再把每个转换后的二进制平方,得到结果再按位与运算,算完再转回十进制,这不也是平方和吗?不知道计算机这样操作数不算用递归替换数学公式计算呢?是不是把过程按计算机自己的语言操作会变的更简单呢?
作者回复: 为啥要转成二进制算啊?没看懂你的意思,整形变量里面存储的值,就是二进制啊,你在程序中计算的时候,本质上就是二进制在计算啊。只有你在用%d输出的时候,计算机才会用十进制给你展示出来。记住,进制不影响计算结果。进制也不重要。重要的是相关数字代表的数字量。2个翻一倍,就是4个,在任何进制下,都是4个,只是表示形式不同。
2020-04-092 - 潮汐int n; scanf("%d", &n); int sumOfSquares = n*(2*n+1)*(n+1)/6; int squareOfSum = ((1+n)*n/2) * ((1+n)*n/2); int res = squareOfSum - sumOfSquares; printf("和平方:%d - 平方和:%d = %d\n", squareOfSum, sumOfSquares, res); 这里想问等差数列如果差不等于1,平方和的公式又是什么呢? 网上查的一个说法是:na1²+n(n-1)d+n(n-1)(2n-1)d²,但这个公式套1就不成立!
作者回复: 可以参考后面习题答疑文章中,我给出的通项公式的推导过程,推导公差为 d 时候的情况。
2020-03-10