算法竞赛(二)

2021-12-09 15:53:04 浏览数 (1)

目录

一、aabb问题

二、7744问题

三、3n 1 问题

四、近似计算

五、阶乘之和

六、数据统计

一、aabb问题

问题描述:输出所以形式为没有 aabb 的完全平方数(例如1122,3344),bb可以为00,aa则不行,又aabb知,这是个四位数,由穷举就可以把每个符合条件的列出来

没有输入:

样例输出:

1100

1111

1122

*****

源代码:

代码语言:javascript复制
#include
int main()
{
	int a,b;
	for(a=1;a<=9;a  )
		for(b=0;b<=9;b  )
		{
			printf("%dn",a*1100 b*11);
		}
	return 0; 
 } 

二、7744问题

问题描述:输入一个整数,判断其是否为完全平方数(用一个int 形变量m存储sqrt(n)四舍五入后的整数,然后判断m^2是否等于n,函数floor(x)返回不超过x的最大整数)

样例输出:

7744

源代码:

代码语言:javascript复制
#include
#include
int main()
{
	int a,b;
	for(a=1;a<=9;a  )
		for(b=0;b<=9;b  )
		{
			int n = a*1100 b*11;
			int m = floor(sqrt(n)   0.5);
			if(m*m == n)	
			printf("%dn",n);
		}
	return 0; 
 } 

三、3n 1 问题

问题描述:对于任意大于1的自然数n,若n为奇数,则将n变为3n 1,否则变为n的一半,经过若干次这样的变换,一定会使n变为1,例如3—>10—>5—>16—>8—>4—>2—>1,可能输入的n非常的大,有时候要把n改为long long型 输入n,输出变换的次数

样例输入:

3

样例输出:

7

源代码:

代码语言:javascript复制
#include
int main()
{
	int n,count = 0;
	scanf("%d",&n);
	while(n != 1)
	{
		if(n%2 == 1)
		n=3*n  1;
		else
		n=n/2;
		count  ;
	}
	printf("%d",count);
	return 0; 
 } 

四、近似计算

问题描述:

,直到最后一项小于

 样例输出:

0.785399

源代码:

代码语言:javascript复制
#include
int main()
{
	double sum =0;
	for(int i = 0;;i  )
	{
		double term = 1.0/(i*2 1);
		if(i%2 == 0)
		sum =sum   term;
		else sum = sum - term;
		if(term<1e-6)//e代表底数10 -6代表负六次方
		break;
	}
	printf("%.6fn",sum);
	return 0; 
 } 

五、阶乘之和

问题描述:输入n,计算1! 2! 3! 4! * * * n!的末六位(不含前导0,只保留后六位数字)。n<=10^6,

样例输入:

10

样例输出:

 37913

源代码:

代码语言:javascript复制
#include
int main()
{
	int n,S;
	scanf("%d",&n);
	for(int i=1;i<=n;i  )
	{
		int f=1;//每次循环都要初始化变量
		for(int j=1;j<=i;j  )
		f*=j;
		S =f;
	}
	printf("%dn",S00000);
	return 0; 
 } 

六、数据统计

问题描述:输入一些整数,求出他们最大值,最小值,平均值(保留三位小数),输入保证这些数都是不超过1000的整数

样例输入

1 2 3

样例输出

1 3 2.000 

源代码:

代码语言:javascript复制
#include
int main()
{
	int x,n=0,min,max,s=0;
	while(scanf("%d",&x)==1)
	{
		s =x;
		if(xmax)max =x;
		n  ;
	}	
	printf("%d %d %.3f",min,max,s*1.0/n);
	return 0;
}

PS:有时候,按下回车键,不一定意味着输入结束,在windows环境下,我们输入完成后,还要按下 ctrl z,这个时候代表输入结束,Linux环境下,按下ctrl D 可代表输入结束

数据统计(重定向版)

代码语言:javascript复制
//重定向法
#define LOCAL
#include
#define INF 1000000000
int main()
{
#ifdef INF LOCAL
	freopen("data.in","r",stdin);
	freopen("data.out","w",stdout);
#endif
	int x,n = 0,min =INF,max = -INF,s = 0;
	while(scanf("%d",&x) == 1)
	{
		s  = x;
		if(xmax) max = x;
		n  ;
	 } 
	 printf("%d %d %.3fn",min,max,(double)s/n);
	 return 0;
}

数据统计(fopen版)

代码语言:javascript复制
#include
#define INF 1000000000
int main()
{
	FILE *fin, *fout;
	fin = fopen("data.in","rb");
	fout = fopen("data.out","wb");
	int x,n = 0,min = INF,max = -INF,s = 0;
	while(fscanf(fin,"%d",&x)==1)
	{
		s  =x;
		if(xmax) max = x;
		n  ;
	}
	fprintf(fout,"%d %d %.3fn",min,max, (double)s/n);
	fclose(fin);
	fclose(fout);
	return 0;
}

0 人点赞