




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++语言程序设计习题课2一、枚举法(穷举法)
“笨人之法”——把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。
3例10-1、百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只。分析:这是个不定方程——三元一次方程组问题(三个变量,两个方程)x+y+z=1005x+3y+z/3=100设公鸡为x只,母鸡为y只,小鸡为z只。则0≤x≤100、0≤y≤100、0≤z≤1004#include<iostream>usingnamespacestd;intmain(){intx,y,z; cout<<"\t公鸡"<<"\t母鸡"<<"\t小鸡"<<endl; for(x=0;x<=100;x++)for(y=0;y<=100;y++) for(z=0;z<=100;z++) if(x+y+z==100&&5*x+3*y+z/3.0==100) cout<<"\t"<<x<<"\t"<<y<<"\t"<<z<<endl; return0;}5【讨论】此为“最笨”之法——要进行101×101×101=1030301次(100多万次)运算。?如何改进要点:确定独立变量个数及取值范围——每个独立变量用一层循环实现“穷举”;确定符合题意的条件表达式——条件成立的方案,输出结果。#include<iostream>usingnamespacestd;intmain(){intx,y,z;cout<<"\t公鸡"<<"\t母鸡"<<"\t小鸡"<<endl;
for(x=0;x<=20;x++)
for(y=0;y<=33;y++){
if(5*x+3*y+z/3.0==100) cout<<"\t"<<x<<"\t"<<y<<"\t"<<z<<endl;} return0;}进行21×34次减法比较z=100-x-y;7练习1、雨水淋湿了算术书的一道题,8个数字只能看清3个,第一个数字虽然看不清但可看出不是1。编程求其余数字是什么?[□*(□3+□)]2=8□□9分析:设分别用A、B、C、D、E五个变量表示自左到右五个未知的数字。其中A的取值范围为2~9,其余取值范围为0~9。条件表达式即为给定算式。结果:328648例10-2、张三、李四、王五三个棋迷,定期去文化宫下棋。张三每五天来一次,李四每六天来一次,王五每九天来一次。问每过多少天他们才能一起在文化宫下棋?
分析:此问题实际上是求最小公倍数的数学问题。设结果为x,其取值范围为1→∞。因上限为无限大,计数值不能预先确定,故用while循环结构更合适。9#include<iostream>usingnamespacestd;intmain(){intx=1; while(1) { if(x%5==0&&x%6==0&&x%9==0) { cout<<"每过"<<x<<"天他们才能一起在文化宫下棋"<<endl; break; } x++; } return0;}10练习2、输入3个自然数a、b、c,求这三个数的最大公约数。分析:设结果为x,其取值范围为1→min(a,b,c)。从上限开始到1,递减寻找符合条件的x,找到的第一个x即为最大公约数。11二、归纳法(递推法)
“智人之法”——通过分析归纳,找出从变量旧值出发求新值的规律。12例10-3、编程显示以下图形(共n行,n由键盘输入)。****************此类题目分析的要点是:通过分析,找出每行空格、*与行号i、列号j及总行数n的关系。由此归纳出:第i行的空格数n-i个;第i行的“*”数是2i-1个。13#include<iostream>usingnamespacestd;intmain(){intn,i,j; cout<<"n=?"<<endl; cin>>n; for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) cout<<''; for(j=1;j<=2*i-1;j++) cout<<'*'; cout<<endl; } return0;}14练习3、编程显示以下图形(共n行,n为奇数,由键盘输入)。*************15例10-4、求n!(n由键盘输入)intmain(){inti,s,n; cout<<"请输入自然数n的值:"; cin>>n; s=1; for(i=1;i<=n;i++) s=s*i; cout<<n<<"!="<<s<<endl; return0;}N=17?自学P8516练习4、求∑n!(n由键盘输入)要求:用双重循环实现求和(外循环作累加,内循环求阶乘)
通过单循环实现
17三、数组的常见程序18插入数据基本思想:
1)首先要查找待插入数据在数组中的位置k;2)然后从最后一个元素开始往前直到下标为k的元素依次往后移动一个位置;3)第k个元素的位置空出,将欲插入的数据插入。例:在有序数组a中插入数值x
inta[10]={1,2,3,4,5,6,7,9,10},n=9,x=8;
for(k=0;k<n;k++)
if(x<a[k])break;//找到插入的位置下标为kfor(i=n-1;i>=k;i--) a[i+1]=a[i];//从最后元素开始往后移,腾出位置
a[k]=x; n=n+1;
19删除数据基本思想:删除操作首先也是要找到欲删除的元素的位置k;然后从k+1到n个位置开始向前移动;最后将数组元素减1。
例:从数组中删除某数。inta[10]={1,2,3,4,5,6,7,8,9,10},n=10,x=8;for(k=0;k<n;k++)if(x==a[k])break;for(i=k;i<n-1;i++)a[i]=a[i+1];n-=1;20例10-5、打印下面的杨辉三角形。1111211331146411510105121分析1:先将杨辉三角形中的数据存储到二维数组中,再输出数组的值。第i行有i个数,每行首尾两个数都是1,即:d[i][1]=d[i][i]=1。每行中间的元素是上一行对应位置元素及其左边元素之和,即d[i][j]=d[i-1][j-1]+d[i-1][j]。22#include<iostream>usingnamespacestd;intmain(){ constintN=10;inti,j,d[N][N]; for(i=1;i<N;i++) { d[i][1]=d[i][i]=1; for(j=2;j<i;j++)d[i][j]=d[i-1][j-1]+d[i-1][j]; } for(i=1;i<N;i++) { for(j=1;j<i+1;j++) cout<<""<<d[i][j]; cout<<endl; } return0;}23练习:用一维数组打印分析2:从第2行开始,对于任一行(假设为第i行),都可以根据上一行的数据按照如下算法得到其数据: 在最右边(即第i个位置)写1,即d[i]=1,从第i-1个数据到第2个数据为止,每
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 定制化劳动合同
- 2025年差容式力平衡传感器项目建议书
- 第16课 明朝科技、建筑与文学(教学设计)七年级历史下册同步备课系列(部编版)
- 高中《语文读本》:资源优势挖掘与高效使用策略探究
- 山东省S县基层公务员借调问题剖析与优化路径探究
- (一模)2025年聊城市高三高考模拟生物试题卷(含答案)
- 2025年成分分析仪合作协议书
- 七年级美术下册4色彩的对比教学教案人美版
- 安史之乱与唐朝衰亡教学设计++2024-2025学年部编版七年级历史下学期
- 2025年环氧塑封料合作协议书
- 2025年度未成年人监护权转移协议书模板
- 2025年湖南铁道职业技术学院单招职业技能测试题库及答案1套
- GB/T 45241-2025公务用车管理平台数据规范
- 2025年中国文创产品行业发展策略、市场环境及前景研究分析报告
- 林木采伐安全协议书范本
- 招聘技巧话术培训
- 第九章 压强 单元练习(含答案)-2024-2025学年人教版物理八年级下册
- 职称评定述职报告
- 急诊危重症患者转运专家共识解读课件
- 2025-2030年中国黑猪行业市场发展状况及投资战略研究报告
- 2024年医师定期考核考题《临床练习》
评论
0/150
提交评论