算法学习之循环结构程序设计

for循环
打印1,2,3,...,n每个占一行。

复制代码
#include <conio.h>
#include<stdio.h>
int main(){int i,n;scanf("%d",&n);for(i=1;i<=n;i++){printf("%d\n",i);}getch();return 0;
}
复制代码


分支结合循环,威力很强大
输出所有形如aabb的四位完全平方数。
分析:先全部列出来,然后开根,看是否为整数。其中a可以从1到9,
b可以从0到9。如何组成aabb呢?
a*1100+b*11即可。
伪代码可以开拓思路。
下面来实现它

复制代码
#include <conio.h>
#include<stdio.h>
#include<math.h>
int main(){int a,b,n;double m;for(a=1;a<=9;a++){for(b=0;b<=9;b++){n = a*1100+b*11;m = sqrt(n);if((int)m == m){//判断是否为整数printf("%d\n",n);}}}getch();return 0;
}
复制代码

另一个思路是枚举平方根x,从而避免开平方操作。

复制代码
#include <conio.h>
#include<stdio.h>
#include<math.h>
int main(){int x,n,high,low;for(x = 1;;x++){n = x*x;if(n<1100) continue;//跳过本次循环if(n>9999) break;//结束本次循环,这一句很重要high = n / 100;//获取高位,技巧low = n  % 100;//获取低位,技巧啊,余下的不满足100的就是低位的数字if(high/10 == high%10&&low/10 == low%10){//前两位相同,后两位相同,则满足条件printf("%d\n",n);}}getch();return 0;
}
复制代码

这个效率貌似不如第一个高!执行的时间比较久,如果没有终止操作,不知道要执行多久呢!
这个大概就是算法的复杂度吧!一定要有意识提高代码的效率!

3n+1问题
猜想:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一般。经过若干次这样的变换,
一定会使n变为1。例如3->10->5->16->8->4->2->1。
输入n,输出变换的次数。n<=10的9次方。
样例输入:3
样例输出:7
分析:程序完成工作依然是重复性劳动,循环的次数是不确定的,而且n不是递增的循环。可以考虑用
while条件式的循环来实现。

复制代码
#include <conio.h>
#include<stdio.h>
int main(){int n,count = 0;//定义变量n,count并为count赋初值scanf("%d",&n);while(n>1){//只要n不等于1,这里n>0的整数,也就是只要n大于1,就执行操作if(n%2 == 1){//奇数n = 3*n+1;  }else{n = n/2;}count++;  }printf("%d\n",count);//不要忘记测试,一个看上去正确的程序可能隐含错误。//断点输出是很好的排错方式//printf("%d\n",n);
    getch();return 0;
}
复制代码

for与while的关系
"
for(初始化;条件;调整){
    循环体
}
"
等价于
"
初始化
while(条件)
{
  循环体;
  调整;
}
"
阶乘之和
输入n,计算S = 1!+2!+3!+...+n!的末6位(不含前导0)。n<=10的6次方。
样例输入:10
样例输出:37913(其实总和为4037913)
分析:如何实现阶乘呢?用一次循环呗。

复制代码
#include <conio.h>
#include<stdio.h>
int main(){int n,i,j,S=0;scanf("%d",&n);for(i=1;i<=n;i++){int factorial = 1;//定义阶乘,每次循环都被重新赋初值for(j=1;j<=i;j++){factorial *= j;}S += factorial;}S = S%1000000;//有几个0就会剩下几位//S = int(S);printf("%d\n",S);getch();return 0;
}
复制代码

每步取模,加一个“计时器”,可以计算出时间复杂度。

输入一些整数,求出它们的最小值、最大值和平均值(保留3位小数)。输入保证这些数都是不超过1000的整数。
样例输入:2 8 3 5 1 7 3 6
样例输出:1 8 4.375

复制代码
#include <conio.h>
#include<stdio.h>
#define INF 1000000000
int main(){int x,n = 0,min = INF,max = -INF,s=0;while(n!=8&&scanf("%d",&x) == 1){s += x;if(x<min) min = x;if(x>max) max = x;n++;}printf("%d %d %.3lf\n",min,max,(double)s/n);getch();return 0;
}
复制代码

下面将其改造成读文件,写文件的形式

复制代码
#define LOCAL
#include <conio.h>
#include<stdio.h>
#define INF 1000000000
int main(){//读取文件
    #ifdef LOCALfreopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#endifint x,n = 0,min = INF,max = -INF,s=0;while(n!=8&&scanf("%d",&x) == 1){//如果前面不通过,就不执行后面的内容了s += x;if(x<min) min = x;if(x>max) max = x;/*printf("x = %d,min = %d,max = %d\n",x,min,max);*/n++;}printf("%d %d %.3lf\n",min,max,(double)s/n);getch();return 0;
}
复制代码

读取当前文件夹下的in.txt
并将结果输出到out.txt中

输出2,4,6,8...2n
方法1

复制代码
#include <conio.h>
#include<stdio.h>
int main(){int i,n;scanf("%d",&n);for(i=2;i<=2*n;i+=2){printf("%d\n",i);}getch();return 0;
}
复制代码


方法2

复制代码
#include <conio.h>
#include<stdio.h>
int main(){int i,n;scanf("%d",&n);for(i=1;i<=n;i++){printf("%d\n",2*i);}getch();return 0;
}
复制代码

浮点陷阱

复制代码
#include <conio.h>
#include<stdio.h>
int main(){double i;for(i=0;(int)i!=10;i+=0.1)//如果不加(int)就永远不会等于10,程序永远不停止!
    {printf("%.1lf\n",i);}getch();return 0;
}
复制代码


C++中的输入输出
方式1

复制代码
#include <conio.h> //C++中保留了C语言中常用的头文件,如果你愿意,可以继续使用stdio.h
#include<cstdio>//功能和C中的stdio.h很接近
using namespace std; //C++特有的单行注释,可以和C中传统注释/**/混合使用
int main(){int a,b;while(scanf("%d%d",&a,&b)==2){printf("%d\n",a+b);}getch();return 0;
}
复制代码


方式2(用iostream)

复制代码
#include <conio.h> //C++中保留了C语言中常用的头文件,如果你愿意,可以继续使用stdio.h
#include<iostream>//C++中的输入输出头文件
using namespace std; //C++特有的单行注释,可以和C中传统注释/**/混合使用
int main(){int a,b;while(cin>>a>>b){//张嘴送给cincout<<a+b<<"\n";//张嘴送给a+b
    }getch();return 0;
}
复制代码


C++中读取文件

复制代码
#include <conio.h>
#include<fstream>
using namespace std;
ifstream fin("in.txt");
ofstream fout("out.txt");
int main(){int a,b;while(fin>>a>>b){//张嘴送给cinfout<<a+b<<"\n";//张嘴送给a+b
    }getch();return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux常用命令 (分门别类)

一、系统安全: su: 用于切换当前用户身份到其他用户身份&#xff0c;变更时须输入所要变更的用户帐号与密码 sudo: 用来以其他身份来执行命令&#xff0c;预设的身份为root lastlog: 用于显示系统中所有用户最近一次登录信息 lastb: 用于显示用户错误的登录列表&#x…

hibernate自定义校验器使用(字段在in范围之内)

2019独角兽企业重金招聘Python工程师标准>>> 1.自定义注解类DigitsMustIn Constraint(validatedBy DigitsMustInValidator.class) //具体的实现 Target({java.lang.annotation.ElementType.METHOD,java.lang.annotation.ElementType.FIELD}) Retention(java.lang.a…

sql将html转成excel,使用SQL*PLUS,构建完美excel或html输出

通过SQL*PLUS我们可以构建友好的输出&#xff0c;满足多样化用户需求。本例通过简单示例&#xff0c;介绍通过sql*plus输出xls&#xff0c;html两种格式文件.首先创建两个脚本:1.main.sql用以设置环境&#xff0c;调用具体功能脚本2.功能脚本-get_tables.sql为实现具体功能之脚…

[cogs347]地震

COGS&#xff1a;地震&#xff08;平衡树&#xff09; COGS上一道题。。。文件名是equake 还是又打了一遍板子。。。 加个lazy标记就行了。。。 注意查询时先下传标记&#xff08;lazy&#xff09; // It is made by XZZ #include<cstdio> #include<algorithm> #de…

第八课-第二讲 08_02_bash脚本编程之七 case语句及脚本选项进阶

第八课-第二讲 08_02_bash脚本编程之七 case语句及脚本选项进阶 一. 面向过程控制结构顺序结构选择结构循环结构选择结构if语句 单分支&#xff0c;双分支&#xff0c;多分支case 语句 case语句:选择结构 case SWITCH invalue1)---此处的value是当做字符来比较的statement....…

html表单提交按钮怎么居中,与表单框一致,居中提交按钮_html_开发99编程知识库...

我嘗試將提交按鈕與表單的一個條目對齊失敗。 我只是希望提交按鈕稍微定位到窗體框的右側和中心。 現在是右邊&#xff0c;但在盒子的底部。我試圖回答相似的查詢&#xff0c;對於提交按鈕( 浮點&#xff0c;margin 等等 )&#xff0c;但是我不能找到正確的選擇。我的HTML如下所…

一个简单的WebService服务

现在&#xff0c;网上提供的免费的webservice服务的网站&#xff1a; http://www.webxml.com.cn/从扩展名上看&#xff0c;是 .net构建的网站。看看功能的实现效果&#xff1a;需求&#xff1a;我们要远程调用手机号归属地的查询&#xff1a;开发步骤&#xff1a; 1&#xff0e…

Linux中的vi和vim

一、vi与vim的概念和区别 概念: 它们都是多模式编辑器&#xff0c;不同的是vim 是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。 vim优势主要体现在一下几方面: 1、多级撤消 我们知道在vi里&#xff0c;按 u只能撤消上次命令&a…

[工具分享]备份SSAS模型TMSL脚本元数据工具,多给自己一点后悔药可吃。

笔者在2019年分享过自己写的一个小工具&#xff0c;用于备份Sqlserver数据库的元数据。近期在一个PowerBI项目中&#xff0c;发现很有必要也备份下SSAS分析模型的元数据&#xff0c;防止不小心服务器坏了或使用Tabular Editor连接数据库方式开发过程中&#xff0c;不小心覆盖了…

UVA - 11181 数学

UVA - 11181 题意&#xff1a; n个人去买东西&#xff0c;其中第i个人买东西的概率是p[i],最后只有r个人买了东西&#xff0c;求每个人实际买了东西的概率 代码&#xff1a; //在r个人买东西的概率下每个人买了东西的概率&#xff0c;这是条件概率&#xff0c;因为最多20个人可…

js时间戳转成日期格式

//第一种2 function getLocalTime(nS) { 3 return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/, ); 4 } 5 alert(getLocalTime(1293072805));6 //结果是2010年12月23日 10:537 //第二种 8 function getLocalTime(nS) { 9 r…

计算机桌面去方格子,win7桌面office图标变成白色方格图标的原因和解法

win7系统开机发现桌面上所有office图标变成白色方格图标&#xff0c;其他程序图标都正常显示&#xff0c;是怎么回事呢&#xff1f;出现这样的情况&#xff0c;一般是由于文件图标缓存错误或者丢失导致&#xff0c;找打原因后该如何解决问题&#xff1f;可以通过记事本来解决此…

JS获取元素的offsetTop,offsetLeft等相关属性

1. obj.clientWidth //获取元素的宽度 obj.clientHeight //元素的高度 obj.offsetLeft //元素相对于父元素的left obj.offsetTop //元素相对于父元素的top obj.offsetWidth //元素的宽度 obj.offsetHeight //元素的高度 区别&#xff1a; clientWidth width padding clientHe…

vi/vim 三种模式及命令 (简单粗暴,轻松搞懂)

//一般模式(默认模式) 一般模式&#xff1a; 移动光标 h 或 向左方向键 光标向左移动一个字符 j 或 向下方向键 光标向下移动一个字符 k 或 向上方向键 光标向上移动一个字符 l 或 向右方向键 光标向右移动一个字符 [Ctrl] [f] 屏幕『向前』移动一页&#xff08;常用) [Ct…

Kong入门学习实践(1)基础概念快览

【API网关】| 总结/Edison Zhou最近在学习Kong网关&#xff0c;因此根据老习惯&#xff0c;我会将我的学习过程记录下来&#xff0c;一来体系化整理&#xff0c;二来作为笔记供将来翻看。由于我司会直接使用Kong企业版&#xff0c;学习过程中我会使用Kong开源版。什么是Kong&am…

条件锁

ReentrantLock类有一个方法newCondition用来生成这个锁对象的一个条件&#xff08;ConditionObject&#xff09;对象&#xff0c;它实现了Condition接口。Condition提供了线程通讯的一套机制await和signal等线程间进行通讯的方法。。1、适用场景当某线程获取了锁对象&#xff0…

计算机应用技术 平面设计,全国信息化计算机应用技术水平教育考试试卷 平面设计师...

科目编号&#xff1a;4233全国信息化计算机应用技术水平教育考试试卷(考试时间&#xff1a;180分钟 考试总分&#xff1a;100分 专业认证课程&#xff1a;Photoshop 平面设计)注意事项1、 请首先按要求在试卷的标封处填写您的姓名、考号等&#xff1b;2、 请仔细阅读各种题目的…

RabbitMQ之消息模式简单易懂,超详细分享

前言上一篇对RabbitMQ的流程和相关的理论进行初步的概述&#xff0c;如果小伙伴之前对消息队列不是很了解&#xff0c;那么在看理论时会有些困惑&#xff0c;这里以消息模式为切入点&#xff0c;结合理论细节和代码实践的方式一起来学习。正文常用的模式有Simple、Work、Fanout…

每天一个linux命令(6):rmdir 命令

今天学习一下linux中命令&#xff1a; rmdir命令。rmdir是常用的命令&#xff0c;该命令的功能是删除空目录&#xff0c;一个目录被删除之前必须是空的。&#xff08;注意&#xff0c;rm - r dir命令可代替rmdir&#xff0c;但是有很大危险性。&#xff09;删除某目录时也必须具…

jvm系列(八):jvm知识点总览

在江湖中要练就绝世武功必须内外兼备&#xff0c;精妙的招式和深厚的内功&#xff0c;武功的基础是内功。对于武功低&#xff08;就像江南七怪&#xff09;的人&#xff0c;招式更重要&#xff0c;因为他们不能靠内功直接去伤人&#xff0c;只能靠招式&#xff0c;利刃上优势来…