程序举例.ppt

上传人:罗晋 文档编号:9380352 上传时间:2021-02-22 格式:PPT 页数:41 大小:366KB
返回 下载 相关 举报
程序举例.ppt_第1页
第1页 / 共41页
程序举例.ppt_第2页
第2页 / 共41页
程序举例.ppt_第3页
第3页 / 共41页
程序举例.ppt_第4页
第4页 / 共41页
程序举例.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《程序举例.ppt》由会员分享,可在线阅读,更多相关《程序举例.ppt(41页珍藏版)》请在三一文库上搜索。

1、C 语言程序设计,主讲:李 果 E-mail:,一些实际问题的解决,取数字问题 分硬币问题 因子、完数问题 数列问题 解简单方程 勾股数、弦数问题 其他,取数字问题,设某四位数的千位数字平方与十位数字的平方之和等于百位数字的立方与个位数字的立方之和,例如,对于四位数:3201, 32+02=23+13。试问所有这样的四位数之和是多少?(97993) 分析:关键在于怎么求出一个四位数的各位上的数字。,main() int i,a,b,c,d; long s=0; for( i=1000; i=9999; i+) a=i/1000; b=i%1000/100; c=i%100/10; d=i%10

2、; if (a*a+c*c=b*b*b+d*d*d) s=s+i; printf(Result:%ldn,s); ,取数字问题,求五位数各位数字的平方和为100的最大的五位数。(94111),main() long x; int a,b,c,d,e; for( x=99999; x10000; x- ) a=x/10000; b=x%10000/1000; c=x%1000/100; d=x%100/10; e=x%10; if( a*a+b*b+c*c+d*d+e*e=100 ) break; printf(“Max : %ldn”, x); ,取数字问题,设某四位数的千位数字与十位数字的和

3、等于百位数字与个位数字的积,例如,对于四位数:9512,9+1=5*2,试问所有这样的四位数之和是多 有一个三位数满足下列条件: (1)此三位数的三位数字各不相同; (2)此三位数等于它的各位数字的立方和。试求所有这样的三位数之和。 有一个三位数满足下列条件: (1)此三位数的三位数字各不相同; (2)此三位数等于它的各位数字的立方和。试求所有这样的三位数中最大的一个是多少? 有一个三位数满足下列条件: (1)此三位数的三位数字各不相同; (2)此三位数等于它的各位数字的立方和。试求这种三位数共有多少个? “水仙花数”是指三位数,其各位数字的三次方之和等于该数本身,例如:153=13+33+5

4、3,故153是水仙花数,求100,999所有水仙花数之和。 回文数是指正读和反读都一样的正整数。求出1000,9999以内的所有回文数的个数。,分硬币问题,有30个人在一家小饭店里用餐,其中有男人、女人和小孩,每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,共花去50先令。如果要求男人、女人和小孩都有人参与,试求有多少种方案分配男人、女人和小孩的人数。(9) 分析:利用穷举法的思想,把所有可能的数据组合一一验证。注意要满足题设所有要求,一是人数总共为30,二是钱花去50。,main() int a, b, c, i=0; for( a=1; a17; a+ ) for( b=1;

5、b25; b+ ) for( c=1; c30; c+ ) if( a+b+c=30 ,分硬币问题,50元的整币兑换成5元、2元和1元币值(要求三种币值均有)的方法有多少种。(106),main() int i, j, k, s=0; for( i=1; i50; i+) for( j=1; j25; j+) for( k=1; k10; k+) if ( i+2*j+5*k=50 ) s+; printf ( The num is : %d n , s ); ,分硬币问题,把一张一元钞票,换成一分、二分和五分硬币,每种至少8枚,问有多少种方案? 50元的整币兑换成5元、2元和1元币值(三种币

6、值均有、缺少一种或两种都计算在内)的方法有多少种。 用100元买100只鸡,大公鸡5元1只,母鸡3元1只,小鸡1元3只。问各能买多少只?,因子、完数问题,若一个正整数的各真因子之和(不包括自身)等于其本身,那么该正整数称为完数。例如:6有3个真因子,分别是1、2、3,而6=1+2+3,所以6就是一个完数。编写程序计算10,1000之间所有完数的和。(524) 分析:关键是怎么求出一个正整数的真因子的和。那么我们首先要判断该正整数有哪些因子。,因子、完数问题,比方我们输入一个正整数,然后求该正整数的所有真因子的和。 main() int x,n,s=0; scanf(“%d”,x); for(n

7、=1;nx;n+) if(x%n=0)s+=n; printf(“s=%dn”,s); ,main() int x,m,sum=0,s,k; for (x=10; x=1000; x+) if (s=x) sum+=x; printf(sum=%d,sum); ,s=0; k=x/2+1; for (m=1; mk; m+) if ( x%m=0 ) s+=m;,因子、完数问题,已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好能被其因子数8整除,求正整数10,100之间有多少个正整数能被其因子的个数整除。 分析:关键是如何求出每个正整数的因子的个数。对于24,我们

8、假设从n=1开始,到n=24结束,只要24能整除n,那么意味着n是24的一个因子。,因子、完数问题,解法: main() int x, i, y, num=0; for(x=10; x=100; x+) if(x%y=0) num+; printf(n%dn,num); ,y=0; for(i=1; i=x; i+) if(x%i=0) y+;,因子、完数问题,一个数如果恰好等于它的所有真因子之和,这个数就称为“完数”。例如, 6的真因子为1,2,3,而6=1+2+3,因此,6是“完数”。求1,1000之间的最大完数。 一个数如果恰好等于它的所有真因子之和,这个数就称为“完数”。例如,6的真因

9、子为1,2,3,而6=1+2+3,因此,6是“完数”。求1,1000之间的第二大完数。 求200,300之间有奇数个不同因子的最大的整数(在计算因子个数时,包括该数本身)。 求200,300之间第二大有奇数个不同因子的整数(在计算因子个数时,包括该数本身)。 已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好能被其因子数8整除,求正整数10,100之间有多少个正整数能被其因子的个数整除。,数列问题,求2+4+6+8+60的和。,main( ) int x, sum=0 ; for ( x=2; x=60; x+=2 ) sum+= x ; printf ( “sum

10、=%d n”, sum ); ,数列问题,当n的值为50时,计算下列公式之值: t = 1+1/22+1/32+1/n2 (按四舍五入的方式精确到小数点后第四位)。 分析:仍然采用累加法,n从1变化到50,每次将1/n2加到总和当中去。注意整个计算过程中数据的类型。,main( ) int n; float t=0; for ( n=1; n=50; n+) t = t+1.0/(n*n) ; printf( “t is: %.4f n , t ) ; ,数列问题,已知:s=2/1+3/2+4/3+(n+1)/n, 求s不超过50的最大值(按四舍五入的方式精确到小数点后第三位)。(49.395

11、) 分析:当n=1,s=2/1 当n=2,s=2/1+3/2 当n=3,s=2/1+3/2+4/3 一直到某一项s50,那么我们不再累加。,main( ) int n; float s=0 , k; for (n=1; s=50; n+) k=s; s+=1.0*(n+1)/n ; printf ( Result: %.3f n“ , k) ; ,数列问题,计算y=1+2/3+3/5+4/7+n/(2*n-1)的值, n=50, 要求:按四舍五入的方式精确到小数点后第二位。(26.47) 当n的值为25时,计算下列公式的值: s=1+1/1!+1/2!+1/3!+1/n!要求:按四舍五入的方式

12、精确到小数点后第四位。 已知:A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), , 求A50.(按四舍五入的方式精确到小数点后第三位)。 利用格里高利公式:/4=1-1/3+1/5-1/7+1/9-1/11+-1/99,求的值。要求:按四舍五入的方式精确到小数点后第二位。,解简单方程,求方程8x-5y=3,在|x|=150, |y|=200内的整数解。试问这样的整数解中|x|*|y|的最大值是多少? (24676) 分析:x在-150到150之间取值,y在-200到200之间取值,对于这两个区间任意一组数据组合,判断其是否满足方程,如果满足则求出|x|*

13、|y| ,然后逐次比较。,#include math.h main() int x, y, t, max=0; for (x=-150; x=150; x+) for (y=-200; y=200; y+) if (8*x-5*y=3) t= abs(x) * abs(y); if (maxt) max=t; printf (max=%dn“ , max ); ,解简单方程,已知AB, A和B均为正整数,且A*B=716699,求A+B的最小值。(1836) 分析:若A初值为1,然后递增到716699,对于每个A,B=716699/A。求最小值,那么我们先假定x代表结果,x初值为一个较大的数,

14、比如716700,A+B肯定比716700小,对于每一组符合条件的A+B,我们拿出来和x进行比较,如果比x小,则x=A+B。,main() long a,b,min=716700; for(a=1; a=716699; a+) b=716699/a ; if(a*b=716699) if(a+bmin) min=a+b; printf(%ldn, min); getch(); ,解简单方程,若(x,y,z)满足方程:x2+y2+z2=552(注:要求 x y z),则(x,y,z)称为方程的一个解。试求方程的所有整数解中,|x|+|y|+|z|的最大值。(或最小值) 已知X,Y,Z为三个正整数

15、,且X2+Y2+Z2=252,求X+Y+Z的最大值。 (x,y,z)满足方程:x2+y2+z2=552(注:要求 x y z),则(x,y,z)称为方程的一个解。试求方程的整数解(包括负整数解)的个数。 求方程9X-19Y=1,在|X|100,|Y|50内共有多少组整数解?,勾股数、弦数问题,若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。例如:由于32+42=52,则5为弦数,求131,200之间最小的弦数。(135) 分析:判断一个数a是否为弦数,关键是能否找到另两个数b和c,这两个数字的平方的和恰好为a的平方。,main() int a,b,c,min=200; for(a=1

16、31;a200;a+) for(b=1;ba;b+) for(c=b;ca;c+) if(c*c+b*b=a*a) if(amin)min=a; printf(min = %dn, min); getch(); ,勾股数、弦数问题,若某整数平方等于某两个正整数平方之和的正整数称为弦数。例如:由于32+42=52,则5为弦数,求100,200之间弦数的个数。(55) 分析:从100到200之间的每个数k我们展开判断,看能否找到另两个数i和j,使得i2+j2等于k2,只要满足该条件,那k就是弦数。,main() int i, j, k, n=0; for( k=100; k=200; k+) fo

17、r( j=1; jk; j+ ) for( i=j+1; ik; i+ ) if ( i*i + j*j = k*k ) n+; printf(n is:%dn , n); ,n is:77,main() int i, j, k, n=0; for( k=100; k=200; ) for( j=1; jk; j+ ) for( i=j+1; ik; i+ ) if ( i*i + j*j = k*k ) n+; goto mm; mm: k+; printf(n is:%dn , n); ,勾股数、弦数问题,勾股弦数是满足公式: A2+B2=C2 (假定ABC)的一组正整数(A,B,C),例

18、如,(3,4,5)是勾股弦数,因为:32+42=52。求A,B均小于25且A+B+C=100的勾股弦数的个数。 (11),#include main() int a,b,c,n=0; for( a=1; a25; a+ ) for( b=a+1; b25; b+ ) c=sqrt(a*a+b*b); if( c*c=a*a+b*b ,勾股数、弦数问题,倒勾股数是满足公式: 1/A2+1/B2=1/C2 的一组正整数(A,B,C),例如,(156,65,60)是倒勾股数,因为:1/1562+1/652=1/602。假定ABC,求A,B,C之和小于100的倒勾股数有多少组? 2 倒勾股数是满足公式

19、: 1/A2+1/B2=1/C2 的一组正整数(A,B,C),例如,(156,65,60)是倒勾股数,因为:1/1562+1/652=1/602。假定ABC,求A,B,C均小于或等于100的倒勾股数有多少组?5 勾股弦数是满足公式: A2+B2=C2 (假定ABC)的一组正整数(A,B,C),例如,(3,4,5)是勾股弦数,因为:32+42=52。求A,B,C均小于或等于100的勾股弦数中A+B+C的最大值。240 若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。例如:由于32+42=52,则5为弦数,求131,200之间最小的弦数。 135,a,b,c,d,e类,设有十进制数字a,

20、b,c,d和e,它们满足下列式子:abcd*e=bcde (a不等于0, e不等于0或1),求满足上述条件的四位数abcd的个数。(2) 分析:关键是如何处理每一位数字和这个数字整体之间的关系。,main() int i,a,b,c,d,e,k=0; for(i=1000;i=9999;i+) a=i/1000; b=i%1000/100; c=i%100/10; d=i%10; for(e=2;e=9;e+) if (i*e=b*1000+c*100+d*10+e) k+; printf(okThe num is:%dn,k); ,a,b,c,d,e类,设有十进制数字a,b,c,d和e,它们

21、满足下列式子:abcd*e=bcde (a不等于0, e不等于0或1),求满足上述条件的所有四位数abcd的和。3665 设有十进制数字a,b,c,d和e,它们满足下列式子:abcd*e=bcde (a不等于0, e不等于0或1),求满足上述条件的最大四位数abcd的值。1999 有十进制数字a,b,c,d和e,它们满足下列式子:abcd*e=bcde (a不等于0, e不等于0或1),求满足上述条件的所有四位数bcde的和。16659 设有6个十进制数字a,b,c,d, e,f ,求满足abcdfe=fdcba条件的五位数abcdf(a0,e0,e1)的个数。,其他一些类型,猴吃桃:有一天小

22、猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。以后每天都是吃尚存桃子的一半零一个。到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。问小猴子第一天共摘下了多少桃子?(1534),main() int n=1,day; for( day=9; day0; day-) n=(n+1)*2; printf ( Result : %d n“ ,n); ,某国今年国民生产总值为45600亿元,若今后每年以8%的增长率增长,编程计算多少年后能实现国民生产总值翻两番?所谓翻两番,其实就是达到当前值的四倍。(19年),main() int year=0; float x=45600,y; y=4*x; while(1) year+; x=x*1.08; if (x=y) break; printf (%d n“ ,year); ,求1到100之间所有整数的立方的和。(25502500),main( ) long x,sum=0; for(x=1; x=100; x+) sum+=x*x*x; printf( sum=%ldn ,sum); ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1