初学者常见的几类编写程序问题
1、求n的阶乘,1! + 2! + 3! +.....+n!
解题思路:看到从1!递增到n!之和,首先要想到至少需要一个循环,由于是每个数的阶乘,可能需要循环里面再嵌套一个循环。但是要有其他方法代替循环的嵌套,就尽量不要用循环的嵌套,因为循环的嵌套会增加时间复杂度。
#include<stdio.h>
int main()
{int i = 0;int j = 0;int a = 1;int n = 0;int sum = 0;scanf("%d", &n);//输入你想要求到的阶乘for (i = 1; i <= n; i++)//求各个数阶乘的后之和{a = 1;for (j = 1; j <= i; j++)//求一个数的阶乘{a *= j;//等同于 a = a * j;}sum += a;//等同于 sum = sum + a;}printf("%d\n", sum);return 0;
}
优化:
#include<stdio.h>
int main()
{int a = 1;int m = 0;int sum = 0;int n = 0;scanf("%d", &n);for (m = 1; m <= n; m++){a *= m;sum += a;}printf("%d\n", sum);return 0;
}
2、任意输入三个数,但三个数从大到小输出
解题思路:首先我们得创建三个变量了,分别用来存储最大值、中间值和最小值,然后让它们依次输出。互换两个数的值,需要借助第三个变量来交换,类似于交换两个装满水的杯子,需要借助第三个空杯子来交换。
#include<stdio.h>
int main()
{int a = 0;int b = 0;int c = 0;//输入scanf("%d %d %d", &a, &b, &c);//输入第一个数后用空格隔开继续输入第二个数//最大值放在a中,最小值放在c中//a和b的较大值放在a中if (a < b){int tmp = a;a = b;b = tmp;}//把a和c中较大的值放在a中if (a < c){int tmp = a;a = c;c = tmp;}//把b和c中较大的值放在b中if (b < c){int tmp = b;b = c;c = tmp;}//输出printf("%d %d %d\n", a, b, c); return 0;
}
3、打印1到100之间3的倍数。
解题思路: 能被3整除的就是3的倍数。需要一个循环再加一个判断语句。
#include<stdio.h>
int main()
{int i = 0;for (i = 1; i <= 100; i++){//判断i是否是3的倍数if (i % 3 == 0){printf("%d\n", i);}}return 0;
}
4、输入两个数,求它们的最大公约数。
解题思路:两个数的最大公约数不管怎么样都不会超过两个数中较小的那一个数。
方法一:
#include<stdio.h>
int main()
{int m = 0;int n = 0;scanf("%d %d", &m, &n);//求最大公约数int ret = 0;//1.求m和n的较小值,假设就是最大公约数if (m > n){ret = n;}else{ret = m;}while (1){if (m % ret == 0 && n % ret == 0)break;ret--;}//打印printf("%d\n", ret);return;
}
方法二:辗转相除法(更优)
#include<stdio.h>
int main()
{int m = 0;int n = 0;int ret = 0;scanf("%d %d", &m, &n);while (ret = m % n){m = n;n = ret;}printf("%d\n", n);return 0;
}
5、打印1000到2000之间的闰年
解题思路:闰年的判断规则:①能被4整除,并且不能被100整除;②能被400整除的。满足以上的某一个条件,都是闰年。
#include<stdio.h>
int main()
{int y = 0;int count = 0;for (y = 1000; y <= 2000; y++){//判断y是不是闰年if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))// &&是表示并且,||表示或{count++;//计算闰年的个数printf("%d ", y);}}//输出个数printf("\ncount = %d\n", count);return 0;
}
如果上述代码理解起来比较绕,可能一下代码更便于理解。
#include<stdio.h>
int main()
{int y = 0;int count = 0;for (y = 1000; y <= 2000; y++){//判断y是不是闰年if (y % 4 == 0 && y % 100 != 0){count++;//计算闰年的个数printf("%d ", y);}if (y % 400 == 0){count++;//计算闰年的个数printf("%d ", y);}}//输出个数printf("\ncount = %d\n", count);return 0;
}
6、打印100到200之间的素数。
解题思路:素数也叫质数,只能被1和它本身整除的数字就是素数
#include<stdio.h>
int main()
{int y = 0;int count = 0;for (y = 100; y <= 200; y++){//判断y是不是素数//拿2到y-1的数字去试除y就行int n = 0;int flat = 1;//假设y是素数for (n = 2; n < y; n++){if (y % n == 0){flat = 0;//不是素数break;}}if (flat == 1){printf("%d ", y);count++;//计算素数的个数}}printf("\ncount = %d\n", count);return 0;
}
优化: 假如判断一个数y是不是素数,从2开始循环到y的开平方根就可以了。
#include<stdio.h>
#include<math.h>//使用sqrt()函数需要的头文件
int main()
{int y = 0;int count = 0;for (y = 101; y <= 200; y+=2){//判断y是不是素数//拿2 到 y-1的数字去试除y就行int n = 0;int flat = 1;//假设y是素数for (n = 2; n < sqrt(y); n++)//sqrt(y)表示y的开平方根{if (y % n == 0){flat = 0;//不是素数break;}}if (flat == 1){printf("%d ", y);count++;//计算素数的个数}}printf("\ncount = %d\n", count);return 0;
}
初学者常见的几类编写程序问题相关推荐
- 利用输入输出流及文件类编写一个程序,可以实现在屏幕显示文本文件的功能,类似DOS命令中的type命令
利用输入输出流及文件类编写一个程序,可以实现在屏幕显示文本文件的功能,类似DOS命令中的type命令 package p1;import java.io.BufferedReader; import ...
- python的难点_汇总Python初学者常见的学习难点
初学Python,面对一个陌生的新生物,是有一些恐惧心理,在学习Python时难免会遇到这样或那样的槛,在这里,IT培训网老师汇总了一些Python初学者的常见的知识难点,希望大家有所帮助. Pyth ...
- 谈谈写程序与学英语(转载)
注: 本文的作者是宋劲杉,原文链接. 俗话说,没有金刚钻,就别揽瓷器活儿.套用到IT业,英语不行,就别做程序员.网上关于程序员学英语的文章不少,但我想谈谈我自己的看法.首先详细讨论一下为什么程序员离了 ...
- 遇到一个php的错误,php初学者常见的几个错误及解决方法
本文为大家分享了php初学者常见的几个错误及解决方法,希望能够帮助到那些刚刚学习php的小伙伴们. 错误一:Parse error: syntax error, unexpected - 这种错误是P ...
- 谈谈写程序与学英语 --宋劲杉
俗话说,没有金刚钻,就别揽瓷器活儿.套用到IT业,英语不行,就别做程序员.网上关于程序员学英语的文章不少,但我想谈谈我自己的看法.首先详细讨论一下为什么程序员离了英语不行,然后针对程序员应该怎么学英语 ...
- android.mk 编译32位_C/C++初学者常见编译错误及其解决办法
用户在C/C++集成开发环境(例如 Dev-C++)中编辑了源代码,执行编译之后,常常会因为源代码中存在问题而出现编译错误(它们会显示在编译窗口中).初学者常常会面对这些错误而不知如何处理.本文下面列 ...
- 51单片机usb烧录电路_51单片机怎么用usb烧写程序 - 全文
单片机怎样用usb烧写程序 首先,需要安装keil软件和STC_ISP程序下载软件. 先对你想要实现对单片机的功能用keil编程,然后用STC_ISP下载软件下载到单片机上,最后打开给单片机提供电源就 ...
- c语言switch循环语序,C语言初学者常见错误统计.doc
C语言初学者常见错误统计.doc C语言初学者常见错误统计 被偏爱程度触犯人次错误类型 ★★★★17使用未定义的变量★★★★16变量值溢出★★★9一行C语句后面漏掉:★★★8语序颠倒★★★6混淆字符常 ...
- [学习之道] 修福不修慧,大象披璎珞; 修慧不修福,罗汉托空钵 (学习写程序,只靠补习上课吗?)...
这是我的备份,原文请看 http://www.dotblogs.com.tw/mis2000lab/archive/2014/09/17/learning-and_do-it_20140917.asp ...
最新文章
- 上帝视角:程序员为什么需要理解 CPU?
- Spring (二) OOP V.S AOP
- SuperMap 房产政务协同管理平台
- Oracle推出5TB磁带 成就EB级磁带库
- 控制HTML Input只能输入数字和小数点
- python3 正则表达式模块re相关
- DB2对年份的处理Year()
- Xamarin Android 应用程序内图标上数字提示
- 通过设置proxyTable实现调用接口跨域
- C语言生成随机数的方法
- python发邮件smtplib+mail
- uniapp + vue3微信小程序开发(2)活体人脸识别
- 使用wangeditor遇到的坑,插入视频只显示音频
- macos最新版本是什么_macOS的最新版本是什么?
- Excel学习笔记:P13-页首、页尾设计、表格加水印
- oracle安装点下一步退出,学习笔记:oracle之win10安装卸载oracle 11gR2步骤及常见问题解决...
- 打造Android万能下拉刷新上拉加载控件
- matlab移相法实现单边带调制,根据Matlab 单边带体系仿真研讨
- 计算机切换用户神魔意思,快速切换用户是什么意思?
- 天猫精灵对接智能设备