首页 > 代码库 > C++第4次实验(基础班)—循环结构程序设计

C++第4次实验(基础班)—循环结构程序设计

此次上机中的4个题目项目6、项目7(选1)必做。其他2两题可从剩下的项目中选,也可从项目7中选。

【项目1:利用循环求和】求1000以内全部偶数的和(答案:250500)

要求:请编出3个程序来,分别用三种循环语句完毕,注意体会各种循环语句的运行过程及语法特点。

【项目2-分数的累加】编程序,输出1/3-3/5+5/7-7/9…+19/21的结果(答案:-0.383842)
提示:假设直接解决上面的问题有困难,能够设计一条“由易到难”的路线,逐渐解决当中要解决的问题。让自己的思路明朗起来。


(1)1+2+...+20  ——这个应该会
(2)1+1/2+1/3+…+1/20  ——分数的累加。注意两个整型相除,商也为整型,而显然求和结果应该是小数
(3)1/2+2/3+3/4+…+19/20  ——分子不全是1了,找找规律,稍加修改就好了
(4)1/2-2/3+3/4-…+19/20   ——要累加的值一正一负倒腾。用pow(-1,i)是个效率非常低的做法,不推荐使用。

技巧:专门设置一个变量s表示累加项的符号,取值随着循环,每次乘以-1。从而在+1、-1之间变化,循环加求和的累加要用累加的项(i/(i+1))乘以这个表示符号的s。


(5)1/3-3/5+5/7-7/9…+19/21  ——这是我们的目标

【项目3:乘法口诀表】编程序。输出一个乘法口诀表,形如
1x1=1
1x2=2  2x2=4  
1x3=3  2x3=6  3x3=9
……

【项目4:输出完数】一个数假设恰好等于它的因子之和,这个数就称为“完数”。

比如6=1+2+3。再如8的因子和是7(即1+2+4),8不是完数。编程找出1000以内的全部完数。(答案:6  28  496)
提示:首先从2到1000构造循环控制变量为i的外层循环。每次循环中。利用内嵌的循环逐个地求出i的因子,并累加起来(为提高效率,可能的因子从1到i/2)。假设因子和等于i,则说明是全然数,输出。

然后继续循环,考察i+1……

【项目5:贪財的富翁】一个百万富翁遇到一个陌生人。陌生人找他谈一个换钱的计划,该计划例如以下:我每天给你十万元。而你第一天仅仅需给我一分钱。第二天我仍给你十万元,你给我两分钱,第三天我仍给你十万元,你给我四分钱,....,你每天给我的钱是前一天的两倍,直到满一个月(30天),百万富翁非常高兴,欣然接受了这个契约。请编程序,通过计算说明,这个换钱计划对百万富翁是否是个划算的交易。(答案:陌给富:3e+006,富给陌:1.07374e+007   富翁亏了)
提示:(1)须要计算出30天后陌生人给了百万富翁多少钱,百万富翁给了陌生人多少钱,然后才干做出推断;(2)想要看得清楚,能够选择列出每一天,两方交易获得的钱数。(3)给出參考解答,将每天累计给对方的钱列出来。非常直观。



【项目6:输出星号图】编程序输出。

 技术分享

【项目7:穷举法解决组合问题】(当然,全做完收效更好)

先阅读例题,领会穷举法(意为“穷尽式列举”,也称枚举)的思想,然后自行选题进行解决,掌握这样的程序设计的一般方法。

例题:小明有五本新书。要借给ABC三位小朋友,若每人每次仅仅能借一本,则能够有多少种不同的借法?

问题分析与算法设计:本问题实际上是一个排列问题。即求从5个中取3个进行排列的方法的总数。首先对五本书从15进行编号。然后使用穷举的方法。

如果三个人分别借这五本书中的一本,当三个人所借的书的编号都不同样时,就是满足题意的一种借阅方法。

以下是程序及其凝视,要注意利用三重循环“穷举”:

#include <iostream> 
using namespace std;
int main()
{
	int a,b,c,count=0;
	cout<<"小明借书给三位小朋友书的方案有:"<<endl;
	for(a=1;a<=5;a++)			//穷举a借5本书中的1本的所有情况
		for(b=1;b<=5;b++)		//穷举b借5本书中的一本的所有情况
			for(c=1;c<=5;c++)	//穷举c借5本书中的1本的所有情况
				if(a!=b&&c!=a&&c!=b) //推断三个人借的书是否不同,(a-b)*(b-c)*(c-a)!=0更好
				{
					++count;
					cout<<count<<": "<<a<<", "<<b<<", "<<c<<endl;//输出方案
				}
	return 0;
}

任务:利用穷举的方法解决以下的问题(选做一道即算完毕任务,其它能够抽时间自由安排。多做会使你更聪明。)

1)百钱百鸡问题:中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一。值钱三,鸡雏三。值钱一,百钱买百鸡,问翁、母、雏各几何?

提示:设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20仅仅,显然x的值在0~20之间;同理,y的取值范围在0~33之间。可得到以下的不定方程:

5x+3y+z/3=100

x+y+z=100

所以此问题可归结为求这个不定方程的整数解。

參考答案:

鸡翁0仅仅,鸡母25仅仅。鸡雏75仅仅。


鸡翁4仅仅,鸡母18仅仅。鸡雏78仅仅。
鸡翁8仅仅。鸡母11仅仅,鸡雏81仅仅。
鸡翁12仅仅。鸡母4仅仅,鸡雏84仅仅。

2)年龄几何:张三、李四、王五、刘六的年龄成一等差数列。他们四人的年龄相加是26,相乘是880,求以他们的年龄为前4项的等差数列的前20项。

提示:设数列的首项为n,项差为a,则前4项之和为n+(n+a)+(n+a+a)+(n+a+a+a)=4*n+6*a",前4 项之积为n*(n+a)*(n+a+a)*(n+a+a+a)。同一时候有1<=a<=4和1<=n<=6。可採用穷举法求出此数列。

參考答案:2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59

3)三色球问题:若一个口袋中放有12个球。当中有3个红的。3个白的和6个黒的,问从中任取8个共同拥有多少种不同的颜色搭配?

提示:设任取的红球个数为i,白球个数为j,则黒球个数为8-i-j。依据题意红球和白球个数的取值范围是0~3,在红球和白球个数确定的条件下,黒球个数取值应为8-i-j<=6。

參考答案:

不同的颜色搭配有:
红球:0,白球:2,黑球:6
红球:0,白球:3,黑球:5
红球:1,白球:1,黑球:6
红球:1,白球:2,黑球:5
红球:1,白球:3,黑球:4
红球:2,白球:0,黑球:6
红球:2,白球:1,黑球:5
红球:2,白球:2,黑球:4
红球:2,白球:3,黑球:3
红球:3,白球:0,黑球:5
红球:3,白球:1,黑球:4
红球:3,白球:2,黑球:3
红球:3,白球:3,黑球:2

4)在以下的加法算式中,不同的符号代表不同的数字。同样的符号代表同样的数字。

请设计程序求出"都、要、学、C"4个符号分别代表的数字。

技术分享

提示:让计算机解奥数题。穷举"都、要、学、C"4个符号分别代表的数字(从0到9)。然后进行组合,假设组合起来符合规则(不同的符号代表不同的数字。同样的符号代表同样的数字,且使等式成立),则为正解。

參考答案:

都:1 要:4 学:6 C:7
都:1 要:5 学:0 C:2

5)有等式[※×(3+)]^2=8※※9,当中※处为1个数字,滴上了墨水无法辨认。请编程找出※表示哪个数字。

拓展:有等式[※×(※3○※)]^2=8※※9。当中※处为1个数字,○处为+、-、×、÷四个运算符之中的一个,现滴上了墨水无法辨认。

请编程找出※表示哪个数字,○表示哪个运算符。

參考答案

等式为:[1×(93+0)]^2=8649
等式为:[3×(23+8)]^2=8649

C++第4次实验(基础班)—循环结构程序设计