国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

藍(lán)橋杯——趣味分?jǐn)?shù)問(wèn)題(2017.2.17)

2019-11-08 03:07:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、最大公約數(shù)與最小公倍數(shù)(GCD,LCM)

        輸入兩個(gè)正整數(shù)m,n,求它們的最大公約數(shù)與最小公倍數(shù)

法一:枚舉法

源代碼:

#include <stdio.h>void fun(int m,int n){	int i;	int gcd,lcm;                  //最大公約數(shù)與最小公倍數(shù) 	for(i=(m>n?n:m);i>=1;i--)	{		if(m%i==0 && n%i==0)		{			gcd=i;			break;		}	}	lcm=m*n/gcd;	PRintf("%d %d/n",gcd,lcm);}int main(){	int m,n;	while(scanf("%d %d",&m,&n)!=EOF)		fun(m,n); } 法二:輾轉(zhuǎn)相除法

        思想:(1)用較大的數(shù)m除以較小的數(shù)n,得到的余數(shù)存儲(chǔ)到變量p中,即p=m%n;

                     (2)上一步中較小的除數(shù)n和得出的余數(shù)b構(gòu)成新的一對(duì)數(shù),并分別賦值給m和n,繼續(xù)做上面的除法;

                     (3)若余數(shù)為0,其中較小的數(shù)(即除數(shù))就是最大公約數(shù),否則重復(fù)(1)(2)兩步。

源代碼:

#include <stdio.h>void fun(int m,int n){	int p,q,t;	int gcd,lcm;	q=m*n;	if(m<n)	{		t=m;		m=n;		n=t;	}	while(n!=0)         //接下來(lái)的循環(huán)中m為最大公約數(shù),n為余數(shù) 	{		p=m%n;		m=n;		n=p;	}	gcd=m;	lcm=q/gcd;	printf("%d %d/n",gcd,lcm);}int main(){	int m,n;	while(scanf("%d %d",&m,&n)!=EOF)		fun(m,n);} 程序截圖:

二、歌星大獎(jiǎng)賽

        某歌星大獎(jiǎng)賽中,有10個(gè)評(píng)委為參賽選手打分,分?jǐn)?shù)為1~100分。選手最后得分為:去掉一個(gè)最高分和一個(gè)最低分后其余8個(gè)分?jǐn)?shù)的平均值。編寫(xiě)程序?qū)崿F(xiàn)。

源代碼:

#include <stdio.h>#include <string.h>#define maxn 11int main(){	int i,a[maxn]={0};	int sum,maxscore,minscore;	double average;	while(scanf("%d",&a[0])!=EOF)	{		for(i=1;i<10;i++)			scanf("%d",&a[i]);		maxscore=minscore=a[0];		sum=0;		for(i=0;i<10;i++)		{			sum+=a[i];			if(a[i]>maxscore)				maxscore=a[i];			if(a[i]<minscore)				minscore=a[i];		}		sum-=(maxscore+minscore);		average=sum*1.0/8;		printf("max=%d min=%d/n",maxscore,minscore);		printf("score=%.2lf/n",average);		memset(a,0,sizeof(a));                          //初始化數(shù)組	}	return 0;} 程序截圖:

三、將真分?jǐn)?shù)分解為埃及分?jǐn)?shù)

        輸入一個(gè)真分?jǐn)?shù),將該分?jǐn)?shù)分解為n個(gè)(n>=1)埃及分?jǐn)?shù)和的形式。

        分子是1的分?jǐn)?shù),叫單位分?jǐn)?shù)。古代埃及人在進(jìn)行分?jǐn)?shù)運(yùn)算時(shí),只使用分子為1的分?jǐn)?shù)。因此這種分?jǐn)?shù)也叫做埃及分?jǐn)?shù)。

        例如:8/11=1/2+1/5+1/55+1/110。

【分析】真分?jǐn)?shù)分解為埃及分?jǐn)?shù)之和的思路:

        (1)分?jǐn)?shù)的分子與分母分別用a和b表示,變量c用來(lái)存儲(chǔ)各個(gè)埃及分?jǐn)?shù)的分母;

        (2)如果分母能夠整除分子,可直接約減成一個(gè)埃及分?jǐn)?shù),此時(shí)埃及分?jǐn)?shù)的分母c=b/a,分子為1,即直接將變量a賦值為1;

        (3)否則分?jǐn)?shù)中一定包含一個(gè)分母為(b/a)+1的埃及分?jǐn)?shù)(即可分解出一個(gè)分母為(b/a)+1的埃及分?jǐn)?shù),c=(b/a)+1);

        (4)如果分子是1,表明已經(jīng)是埃及分?jǐn)?shù),不用再分解,結(jié)束;

        (5)如果分子是3且分母是偶數(shù),則可直接分解成兩個(gè)埃及分?jǐn)?shù)1/(b/2)和1/b,結(jié)束;

        (6)從分?jǐn)?shù)中減去這個(gè)分母為(b/a)+1的埃及分?jǐn)?shù),回到步驟(2)重復(fù)上述過(guò)程。

源代碼:

#include <stdio.h>int main(){	long int a,b,c;                   //a-分?jǐn)?shù)分子 b-分?jǐn)?shù)分母 c-各個(gè)埃及分?jǐn)?shù)的分母	while(scanf("%ld/%ld",&a,&b)!=EOF)	{		while(1)		{			if(b%a!=0)                //若分子不能整除分母,則分解出一個(gè)分母為b/a+1的埃及分?jǐn)?shù)				c=b/a+1;			else                      //否則,輸出化簡(jiǎn)后的真分?jǐn)?shù)(埃及分?jǐn)?shù)) 			{				c=b/a;				a=1;				}			if(a==1)                  //a為1標(biāo)志階數(shù) 			{				printf("1/%ld/n",c);				break;				}			else				printf("1/%ld+",c);			a=a*c-b;                  //求出余數(shù)的分子 			b=b*c;                    //求出余數(shù)的分母			if(a==3 && b%2==0)        //若余數(shù)分子為3,分母為偶數(shù),輸出最后兩個(gè)埃及分?jǐn)?shù)			{				printf("1/%ld+1/%ld/n",b/2,b);				break;			}		}	}	return 0;}程序截圖:

四、列出真分?jǐn)?shù)序列

        按遞增順序依次列出所有分母為n,分子小于n的最簡(jiǎn)真分?jǐn)?shù)

源代碼:

法一:枚舉分?jǐn)?shù)的分子

#include <stdio.h>int main(){	int fz,fm,n;	int i,flag;	while(scanf("%d",&n)!=EOF)	{		fm=n;		for(fz=1;fz<fm;fz++)		{			flag=1;			for(i=2;i<=fm/2;i++)			{				if(fm%i==0 && fz%i==0)				{					flag=0;					break;				}			}			if(flag==1)				printf("%d/%d/n",fz,fm);		}	} 	return 0;}法二:結(jié)合輾轉(zhuǎn)相除法思想求解(可降低算法復(fù)雜度)

#include <stdio.h>int main(){	int i,j,n;	int num1,num2;	while(scanf("%d",&n)!=EOF)	{		for(i=1;i<=n;i++)		{			num1=n;			num2=i;			while(num2!=0)                 //輾轉(zhuǎn)相除法求最大公約數(shù) 			{				j=num1%num2;				num1=num2;				num2=j;				}			if(num1==1)                    //分子與分母的最大公約數(shù)為1時(shí),該分?jǐn)?shù)為最簡(jiǎn)真分?jǐn)?shù) 				printf("%d/%d/n",i,n);		}	} 	return 0;}程序截圖:

五、多項(xiàng)式之和的計(jì)算

        計(jì)算下列多項(xiàng)式的值:S=1+1/(1*2)+1/(1*2*3)+ … + 1/(1*2*3* … *50)

源代碼:

#include <stdio.h>int main(){	int i,j,n;	double t,sum;	while(scanf("%d",&n)!=EOF)	{		sum=0;		for(i=1;i<=n;i++)		{			t=1;			for(j=1;j<=i;j++)        //注意精度問(wèn)題,可以將階乘形式的分母進(jìn)行轉(zhuǎn)化,計(jì)算				t*=(1.0/j);			sum+=t;		}		printf("%lf/n",sum);	}	return 0;}程序截圖:


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 九龙城区| 周宁县| 阿荣旗| 芮城县| 邵武市| 如皋市| 紫阳县| 乐都县| 山阳县| 屏东市| 友谊县| 吴堡县| 辽源市| 定边县| 聊城市| 鄂尔多斯市| 通州区| 南昌县| 理塘县| 海晏县| 邻水| 景谷| 阿拉善右旗| 上虞市| 五莲县| 永兴县| 清新县| 东阿县| 宿松县| 巩留县| 类乌齐县| 梁平县| 乌兰浩特市| 什邡市| 怀柔区| 扎赉特旗| 察隅县| 襄樊市| 天等县| 陆良县| 尉氏县|